kafka基础-思维导图
Kafka进阶思维导图
Kafka监控调优思维导图
影响Consumser端TPS
慢,效率低
组成员数据发生变化
订阅主题数量发生变化
订阅主题分区数发生变化
尝试解决:Consumer没能及时发送心跳请求,导致被踢出Group
session.timeout.ms 会话间隔
heartbeat.interval.ms 心跳间隔
session.timeout.ms >= 3* heartbeat.interval.ms 至少3轮的心跳请求。
尝试解决:Consumer 消费时间过长导致的
max.poll.interval.ms拉取消息的时间间隔
0.10.1.0版本之前,在消费者主线程中
目前心跳线程,heartbeat.interval.ms 控制重平衡通知的频率
Empty | 组内没有成员,可能存在已提交的位移数据,,而且这些位移未过期 |
Dead | 组内没有成员,元信息已被协调者移除 |
PreparingRebalance | 消费者组准备开始重平衡,所有成员都要重新加入该组 |
CompletingRebalance | 消费者组所有成员已加入,正等待分配方案。该状态老一点的版本中杯称为AwaitingSync |
Stable | 稳定状态,已重平衡完成,组内成员正常消费数据 |
协调者组件保存着当前向他注册过的所有组信息。
场景
新成员入组
组成员主动离组
组成员崩溃离组
重平衡时协调者对组内成员提交位移的处理
步骤
当重平衡开启时,协调者会给予成员一段缓冲时间,要求每个成员必须在这段时间内快速地上报自己的位移信息
然后再开启正常的 JoinGroup/SyncGroup 请求发送
JoinGroup请求 和 SyncGroup请求。
第一个发送JoinGroup的成为领导者
领导者(消费者),收集所有成员的订阅信息,然后根据这些信息,指定具体的分区消费方案
使用producer.send(msg,callback) callback 可以准确知道消息是否提交成功。
设置acks=all 所有副本都接收到消息。
设置retries为一个较大的值 重试防止网络抖动。
unclean.leader.election.enable=false , Broker端参数,禁止落后的Broker成为Leader。
replication.factor>=3, Broker端的参数 , 副本数量,冗余。防止消息丢失。
min.insync.replicas>1, Broker端的参数 , 至少要写入的最小副本数,提升消息持久性。
确保replication.factor > min.insync.replicas 副本数大于最小写入副本数,否则有一个副本挂了,集群就不可用了。
建议:replication.factor = min.insync.replicas + 1
确保消息消费完成再提交点位
通常是分布式系统再多台网络互联的机器上保存有相同的数据拷贝。
提供数据冗余 (kafka仅仅用到这个好处)
提高伸缩性
改善数据局部性
方便实现 Read-your-writes ,向Kafka成功写入消息后,马上使用消费者API去读取刚才生成的消息
方便实现单调读
同步副本集,包含Leader 与follower副本
replica.lag.time.max.ms参数值,Follwer副本能落后Leader副本的最长时间间隔,默认为10s
不修改应用程序的逻辑的情况下,动态的实现一组可插拔的事件处理逻辑链。
端到端系统性能检查、消息审计等多种功能在内的场景。
生产者拦截器
发送消息前
消息提交成功后
消费者拦截器
消费消息前
提交位移后
指定拦截器类时,一定要指定它们的全定限名