https://www.jianshu.com/p/eba0067b1e1a
-
主题(Topic):类似于rocketmq的Topic,不同于activemq的topic,是根据consumer的状态分为 集群订阅和发布订阅。
-
分区(Partition):类似于rocketmq的queue,一个topic中的消息数据按照多个分区组织,分区是kafka消息队列组织的最小单位,一个分区可以看做是一个FIFO的队列;
-
副本(Replication):为了保证分布式可靠性,针对每个Partition有副本的概念,副本数不超过Broker的节点数,注意这里的副本是针对分区而言的,有leader和follower角色的partition,follower是冷备,不处理任何读写请求
特性:
- kafka的consumer也是pull模型,和rocketmq一样的
- 支持批量发送、异步发送
集群
一个kafka集群支持多个Broker,但是Broker之间并没有主从的概念,这个架构上和rocketmq区别很大,有点反传统模式。
每个Topic下有N个partition,每个partition可以有N个副本(N不能超过Broker的个数),每个Partition有一个leader,leader完成所有的读写请求,其它副本只是冷备的作用
基于这个模式,主从的概念不是在物理节点上,而是基于逻辑的partition了,一个topic有N个partition,每个partition都会选举一个leader,物理节点在不同partition支持并发的写。实现了类似的多节点一起写的效果。
kafka的存储机制
https://www.cnblogs.com/jun1019/p/6256514.html

- 每个topic -->n个partition(每个partition对应一个目录)
- 每个partition-->n个segment(每个segment默认500M,满了就新增,超过7天自动清除)
- 每个segment对应两个文件 log文件和index文件,index存储的是(消息的序号offset,消息对应在log的位置)
- 支持顺序写。每个segment的序号是递增的。
- kafka默认被消费之后的消息仍然不会删除,可以设置一个保留期(默认7天,系统自动删除)
kafka的消费负载均衡
是由zk来维护,Consumer和partition的信息,几个Consumer瓜分一个topic下的partition,和rocketmq一样的。
kafka的顺序消息
通过把一个topic下的 partition设置为1个,且只有1个消费者的情况,是可以实现顺序消息的,否则是无法保证的。
RocketMQ有指定queue的功能,指定且消费的时候加锁,但是kafka不具备。
but kafka也支持根据hash(key)来指定partition(默认轮询),
kafka的角色
http://kafka.apache.org/documentation/#design
注册中心 :zookeeper ; 消费者、生产者、broker(支持多broker)
网友评论