Event streaming is the digital equivalent of the human body’s central nervous system
概述
分布式基于发布/订阅模式的消息队列,应用于大数据实时处理领域。
1 6 3005
应用
- 异步处理
两种模式
- 点对点 消费者主动拉取消息
- 发布订阅 一对多 消费者消费数据后不会清除消息
结构
- broker 主题 消息队列分区 ,一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker,可以容纳多个 topic。
- Topic 逻辑:可以理解为一个队列,生产者和消费者面向的都是一个 topic;
- Partition物理分区:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列
- follower 副本 leader主要 生产者消费者只找leader
- consumer group 消费者组 某一个分区只能被同一个消费者组里的消费者消费
- zookeeper 如果kafka要集群要用一套zk
分片和索引机制
生产者生产的信息不断增加在log文件末尾,为防止log文件过大导致数据定位效率低下。
segment
每个partition分为多个segment,每个segment对应两个文件.index索引和.log数据
文件夹命名规则
topic名称+分区序号
分区的原因
- 方便集群中扩展
- 可以提高并发 为p为单位读写
分区原则
将producer发送的数据封装成一个ProducerRecord对象
- 指明 partition 的情况下,直接将指明的值直接作为 partiton 值;
- 没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 topic 的 partition
数进行取余得到 partition 值; - 既没有 partition 值又没有 key 值的情况下,第一次调用时随机生成一个整数(后
面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition
值,也就是常说的 round-robin 算法
可靠性保证
每次p收到producer发送的数据后,想producer发送ack,则进行下一轮发送否则重新发送
副本同步策略
使用第二种并优化方案。ISR
同步副本 ISR
Leader 维护了一个动态的 in-sync replica set (ISR),意为和 leader 保持同步的 follower 集
合。当 ISR 中的 follower 完成数据的同步之后,leader 就会给 follower 发送 ack。如果follower
长时间 未 向 leader 同 步 数 据 , 则 该 follower 将 被 踢 出 ISR , 该 时 间 阈 值
replica.lag.time.max.ms 参数设定。Leader 发生故障之后,就会从 ISR 中选举新的 leader。
p15
问题
zap协议