Please enable JavaScript.
Coggle requires JavaScript to display documents.
kafka - Coggle Diagram
kafka
基本概念
-
-
-
-
-
-
-
-
ISR 副本集合,
筛选符合要求的leader ,通过参数 replica.lag.time.max.ms
副本如果落后时间超过这个会被剔除
参数
-
broker
-
-
-
listeners: INSIDE://0.0.0.0:9092,OUTSIDE://0.0.0.0:9094
advertised_listeners: INSIDE://localhost:9092,OUTSIDE://<宿主机ip>:<宿主机暴露的端口>
kafka_listener_security_protocol_map: "INSIDE:SASL_PLAINTEXT,OUTSIDE:SASL_PLAINTEXT"
kafka_inter_broker_listener_name: "INSIDE"
-
-
jvm
-
-
export KAFKA_HEAP_OPTS=--Xms6g --Xmx6g
export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true
bin/kafka-server-start.sh config/server.properties
操作系统
-
-
最后是提交时间或者说是 Flush 落盘时间。数据被写入到操作系统的页缓存(Page Cache),操作系统根据 LRU 算法会定期将页缓存上的“脏”数据落盘到物理磁盘上。这个定期就是由提交时间来确定的,默认是 5 秒。比如ext4就是commit=Nseconds这样设置
-
-
-
-
控制器
-
职责
- broker 信息和监控
- topic管理
- 分区管理
- Preferred 选举
- 对其他broker提供服务
保存了什么数据
- 主题的信息,分区信息,LSR集合信息
- broker的信息,状态等
- 运维分区信息
-
高水位
leader epoch
两部分组成一个是版本id每次leader换人+1,
起始位置的offset,
-
-
当副本成为Follower时:
- 向Leader发送LeaderEpochRequest请求,请求内容中含有Follower当前本地的最新Epoch
- 主取出当前epoch与之比较,如果相等则返回自己的LEO,如果不等则取出比follow epoch 大一代的startoffset返回
- Follower在拿到LastOffset后,若LastOffset < LEO,将截断日志;
- Follower开始正常工作,发送Fetch请求;
-
-
更新逻辑
-
follower
- 写入消息到本地磁盘。
- 更新 LEO 值。
- 比较leader发送的高水位和更新后的LEO小的作为新的高水位
-
重平衡
-
消费者端重平衡流程
- 等待消费组加入
消费者实例发送 Join group 消息 消息包括自己要订阅哪个主题
第一个发送的为Leader 指定具体方案
- 等待leader Consumer 分配方案
syncgroup 消息 由leader发送给协调者包括已制定的方案
其他消费者也发不过没方案,只是告诉协调者我要接受
-
-