apache kafka 定位
- Apache Kafka 是消息引擎系统
- 也是一个分布式流处理平台(Distributed Streaming Platform)
消费模型
- 点对点
- 订阅发布
- 使用 consumer group
名称
示意图
结构
broker
: kafka 集群的一个实例topic
: 一个主题,可以跨多个 brokerpartition
: 分区,一个 topic 可以有多个 partition- 可以拓展 topic 大小和更多写入和消费
replication
: 一个 分区有 n 个 replication,replication 可以放在不同的 broker 上,即一个分区可以跨多个 broker,也就是一个 topic 可以跨多个 broker(分布式)leader replication
: 一个分区只有一个领导者 replication- 负责客户端的写请求
follower replication
: 一个分区有 n - 1 个 replication- 负责被动异步同步 leader replication 的数据,不处理请求
offset
producer
: 消息生产者,只会生成消息到一个 topic 的一个 partition 的 leader replication 上consumer
: 消息消费者,只会消费一个 topic 的某一个 partition 的消息consumer group
: 消费者组。一个 topic 中的每个分组只会被组内的一个 consumer 实例消费Rebalance
: 重平衡。consumer group 内的各个 consumer 可以互相协调,某个 consumer 挂掉,kafka 会检测到,将该 consumer 之前负责的分区转义给其他活着的 consumer
概念
In-sync Replicas(ISR)
- 表示和 leader replication 处于同步状态的 replication 集合
- 判断依据
- leader replication 天然处于 ISR 中
replica.lag.time.max.ms
决定 follower replication 最少不能落后于 leader replication 的时间,默认 10s- 只要不落后于该时间,就算不落后
Unclean 领导者选举(Unclean Leader Election)
- unclean leader,就是非 ISR 的 follower replication
- Broker 端参数
unclean.leader.election.enable
控制是否允许 Unclean 领导者选举- 开启会导致数据一致性无法满足
消息存储
- 消息保存在 Log,即日志中
- Log 内部是分为多个 Log Segemtns,即日志段
- 消息顺序写,实际上是写入最新的 Log Segments 上
- 当磁盘空间不足,或者触发某些配置的条件时,会删除日志
- kafka 有定时任务,定时删除旧的 Log Segments