kafka实践

来源:互联网 发布:笔记本网络连接不可用 编辑:程序博客网 时间:2024/06/06 15:29
  1. 下载kafka_2.11-1.0.0.tgz
  2. 安装和启动教程
  3. 自己做一个类似kafka的消息队列处理系统:比如做一个发短信系统,短信发送接口每秒只能发送2条,有时候系统一秒钟就需要发送100条信息,有时候一天也不发一条信息,土办法是:把要发送的消息存在数据库的表里,用java定时任务每秒取两条未处理的信息发送,发送完把表里该条记录置为已处理。如果只有一个java定时任务这个土办法完全能满足需求(解决突然间大量短信要发送造成系统崩溃问题),但是要扩展性能,现在申请了两个短信发送接口,用两个java定时任务分别调用这两个接口,这个时候就出现并发的问题,定时器A取两条未发送信息,同时可能定时器B取的也是这两条信息,从数据库取未发送信息后马上把该记录更新为已处理,再调用短信发送接口发送,如果失败再把记录更新为未发送,这样会好一点,因为短信发送接口发送短信比较慢,先更新记录状态可以防止在此期间其它定时器再获取该记录发送,但是不能完全解决这个问题,因为获取记录马上更新记录状态也有时间间隙,在此期间也可能造成记录被定时器B获取。解决方案是:在表里增加一个分配给哪个定时器处理的字段,枚举值:A、B,该字段值A和B交替产生。
  4. kafka比我做的系统好的地方:巨量的数据,就算数据库分表分库也解决不了,这时大量的insert,update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。比如kafka是把消息先放内存再异步持久化到磁盘,因为是先放到内存所以可以支持比数据库更多的并发量。
原创粉丝点击