您的位置:首页 > 其它

5分钟了解Kafka

2016-07-20 00:00 169 查看
带着“为啥要用Kafka”这样的问题,读了下面这些关于Kafka的文档,把一些Kafka特性的东西摘抄出来。假设读者对标准的队列服务有认识,了解生产者、消费者、发布者、订阅者、queue、topic这些概念,这里摘抄的基本都是Kafka不符合我们理解的标准队列服务的特性

Kafka入门经典教程 2014-1

分布式发布订阅消息系统 Kafka 架构设计 2013-11

Apache kafka原理与特性(0.8V) 2014-9

###Kafka消息
……即使消息被消费,消息仍然不会被立即删除.日志文件将会根据broker中的配置要求,保留一定的时间之后删除。

本质上kafka只支持Topic.

如果所有的consumer都具有相同的group,这种情况和JMS queue模式很像;消息将会在consumers之间负载均衡.

如果所有的consumer都具有不同的group,那这就是"发布-订阅";消息将会广播给所有的消费者.

partitions的设计目的……最根本原因是……来避免文件尺寸达到单机磁盘的上限……(以及)消息保存/消费的效率。

###Kafka消费者
对于consumer而言,它需要保存消费消息的offset。

kafka集群几乎不需要维护任何consumer和producer状态信息,这些信息有zookeeper保存。

当consumer启动时,所触发的操作:

首先进行"Consumer id Registry";

然后在"Consumer id Registry"节点下注册一个watch用来监听当前group中其他consumer的"leave"和"join";只要此znode path下节点列表变更,都会触发此group下consumer的负载均衡.(比如一个consumer失效,那么其他consumer接管partitions).

在"Broker id registry"节点下,注册一个watch用来监听broker的存活情况;如果broker列表变更,将会触发所有的groups下的consumer重新balance.

###Kafka消费方式

在JMS实现中,Topic模型基于push方式,即broker将消息推送给consumer端.不过在kafka中,采用了pull方式.

……,当消息消费成功后,(消费者)向zookeeper提交消息的offset,而不会向broker交付ACK.或许你已经意识到,这种"宽松"的设计,将会有"丢失"消息/"消息重发"的危险.

对于JMS实现,消息传输担保非常直接:有且只有一次(exactly once).在kafka中稍有不同,……

at most once: 消费者fetch消息,然后保存offset,然后处理消息;

at least once: 消费者fetch消息,然后处理消息,然后保存offset。

exactly once: kafka中并没有严格的去实现(基于2阶段提交,事务),我们认为这种策略在kafka中是没有必要的。

###啊,不要停
kafka中,replication策略是基于partition,而不是topic;kafka将每个partition数据复制到多个server上,任何一个partition有一个leader和多个follower(可以没有);

Follower就像一个"consumer"(broker内销),消费消息并保存在本地日志中;leader负责跟踪所有的follower状态,如果follower"落后"太多或者失效,leader将会把它从replicas同步列表中删除。

当所有的follower都将一条消息保存成功,此消息才被认为是"committed",那么此时consumer才能消费它。

即使只有一个replicas实例存活,仍然可以保证消息的正常发送和接收,只要zookeeper集群存活即可.(备注:不同于其他分布式存储,比如hbase需要"多数派"存活才行)

当leader失效时,需在followers中选取出新的leader,可能此时follower落后于leader,因此需要选择一个"up-to-date"的follower。

###Why Kafka?
和标准的队列系统来比,Kafka的吞吐量和处理机制还是很有特性的。和ZeroMQ的对比就不那么明显了。看到知乎里说,Kafka也可以用ZeroMQ做底层通信机制,换句话说Kafka和ZeroMQ不完全是一个层级的东西。

总之,看了一些不同消息产品的对比文章,反而对RabbitMQ和0MQ有了好感。

[消息队列软件产品大比拼] (http://www.cnblogs.com/amityat/archive/2011/08/31/2160293.html) MSmQ vs ActvieMQ vs RabbitMQ vs 0MQ

消息队列的选择 Kafka vs RabbitMQ vs 0MQ

###那到底什么时候用?

动态汇总(News feed)功能。将你朋友的各种活动信息广播给你相关性以及排序。

安全:网站需要屏蔽行为不端的网络爬虫(crawler),对API的使用进行速率限制,探测出扩散垃圾信息的企图,并支撑其它的行为探测和预防体系,以切断网站的某些不正常活动。

运营监控:大多数网站都需要某种形式的实时且随机应变的方式,对网站运行效率进行监控并在有问题出现的情况下能触发警告。

报表和批处理: 将数据装载到数据仓库或者Hadoop系统中进行离线分析,然后针对业务行为做出相应的报表,这种做法很普遍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Kafka 消息队列