-
设计
-
结构
-
zookeeper
- 帮助管理kafka的重新选举
- 问题:leader的选举是实时性还是阶段的还是一次性的
-
Topic=一类消息,分为多个partition
-
partion(分区=一个apped log文件,任何发布到此的消息直接追加到文件位置尾部~有单文件最大容量的限制)-里面消息数据为有序队列
- (replica)副本n
- 宕机数目<= (副本数)n - 1
- 在创建topic时指定,一般3个
- 分布不同节点(broker)
- 保证数据的容错安全性
- offset=追加的消息在文件中的位置
- long型数字
- 标记一条消息
- 选举一个leader
- 负责用户的读写请求
- 同步消费操作给其它副本
- 定期的消除数据
- 一般七天
- 减少消息消费后对文件内容改动的磁盘IO开支
- 目的:
- 通过分区来避免文件尺寸达到单机磁盘上限
- 日志内容可以分散到多个server(kafka的实例)
- 每个partition都会被当前的server保存
- 提供高并发存取
- 更多partition意味着更多的consumer
-
partitions数目 = leader数目
- 将“leader”均衡分布在每个实例(server 节点)上
-
producer
-
将信息发送到指定的Topic
- 也可决定到哪一个partition上
- 基于“round-robin”方式或者通过其他算法
-
consumer 属于 group
-
一个partition中消息只会被group中的一个consumer消费
- 每个group中consumer消息消费互相独立
- 对于那个cunsumer消息是有序的
- 从Topic角度,消息仍不是有序地
- kafka只能保证一个
-
offset(偏移量)数据
- 专一的负责输出和输入
- consumer可以按照偏移量自定义读取
- 线性向前消费
-
设计要求
-
一个topic来说
- 同一个group中不能有多余partitions数目的consumer同时消费,某些无法得到消息
-
Guarantees
-
1.发送到partitions中的消息会按照它接收的顺序追加到日志中
- 自由主题
- 自由主题
- 自由主题
- 2.对于消费者,消费顺序和日志顺序一致
- 3.如果Topic的“replicationfactor”为N,那么允许N-1的kafka实例失效
-
强依赖zookeeper
-
zookeeper负责维护任何consumer,producer状态信息,分担kafka的压力
-
producer,consumer客户端实现轻量级
- 可以随意离开不造成影响
- 子主题 2
-
定义
- 有JMS特性