kafka进阶-给你思维导图

文末思维导图

kafka基础-思维导图    

Kafka进阶思维导图    

Kafka监控调优思维导图

消费者组重平衡

弊端

影响Consumser端TPS

慢,效率低

发生时机

组成员数据发生变化

订阅主题数量发生变化

订阅主题分区数发生变化

优化配置,避免不必要的Rebalance

尝试解决:Consumer没能及时发送心跳请求,导致被踢出Group

session.timeout.ms    会话间隔

heartbeat.interval.ms 心跳间隔

session.timeout.ms >= 3* heartbeat.interval.ms 至少3轮的心跳请求。

尝试解决:Consumer 消费时间过长导致的

max.poll.interval.ms拉取消息的时间间隔

发生Rebalance时,由哪个线程通知其他消费者实例

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为一个较大的值 重试防止网络抖动。

Broker部分

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仅仅用到这个好处)

提高伸缩性

改善数据局部性

Kafka追随者副本不对外提供服务的原因

方便实现 Read-your-writes ,向Kafka成功写入消息后,马上使用消费者API去读取刚才生成的消息

方便实现单调读

In-sync Replicas (ISR)

同步副本集,包含Leader 与follower副本

判断Follower与Leader同步的标准

replica.lag.time.max.ms参数值,Follwer副本能落后Leader副本的最长时间间隔,默认为10s

拦截器

基本思想

不修改应用程序的逻辑的情况下,动态的实现一组可插拔的事件处理逻辑链。

使用场景

端到端系统性能检查、消息审计等多种功能在内的场景。

拦截点

生产者拦截器

发送消息前

消息提交成功后

消费者拦截器

消费消息前

提交位移后

注意事项

指定拦截器类时,一定要指定它们的全定限名

kafka进阶-给你思维导图_第1张图片

你可能感兴趣的:(中间件,kafka入门与实战)