kafka的一些认识

来源:互联网 发布:小学生必读书目 知乎 编辑:程序博客网 时间:2024/06/10 07:46
原创文章转载请注明出处:@协思, http://amwicfai.cnblogs.com 近来无事研究了一下kafka,并且用golang连接kafka做了producer和consumer的简单测试,对kafka有了一些基本的认识。 kafka不同于activemq和
原创文章转载请注明出处:@协思, http://amwicfai.cnblogs.com 

近来无事研究了一下kafka,并且用golang连接kafka做了producer和consumer的简单测试,对kafka有了一些基本的认识。

 kafka不同于activemq和rabbitmq等这种符合AMQP协议的标准消息队列产品,它有一些list或者array的特征,可以指定从offset读取。阿里巴巴的rocketmq在原型产品中借鉴了kafka的设计思想,现已在阿里大规模使用,详情参考:https://github.com/alibaba/RocketMQ kafka提倡使用拉模式,并且可以对消息重复消费,看起来不符合传统queue的思想,但却提供了额外的好处,比如:某模块更新到产线发现有bug,需要将上线以来的消息全部重新消费,即消息回溯。 kafka是高并发型的消息队列,但这是有前提条件的。条件是topic要定义多个partition,将压力分担到各个partition上。topic是逻辑概念,partition是物理存在各个broker,以此达到负载均衡的目的。要注意的是,各个partition可以独立消费,各partition间的消息是无法保证顺序性的,顺序只存在同一partition。以我的经验看,无论哪种MQ,要严格保证顺序,都要付出昂贵的代价,因此弱化顺序是有必要的。 kafka的另一个特性是高可用。放眼目前业界数据层的高可用解决方案,采用的无非都是两种:冗余数据和共享存储。后者以坐标昂贵著称,比如SAN,给土豪公司玩的。在党中国构建节约性社会的号召下,我建议使用前者。冗余数据最常见的便是日志复制,kafka的道理也一样。由一组节点组成leader,follower组成小的cluster,由zookeeper做协调(Paxos算法)。leader,follower的比例和数量可配置,一般为1:2。在写入的时候, follower会不断复制leader的数据,leader挂掉后会从follwer中选举新的leader。 kafka使用了零拷贝技术来优化性能,直接发送磁盘的数据到socket。此为其极为取巧的设计和亮点。
0 0
原创粉丝点击