截屏2025-01-08 23.40.23.png
- kafka采用的是pull方式拉取消息.
topic 异步到consumer 对应一个 consumergroup
topicA消息发送到consumer group0 一一对应
topicB 消息发送到consumer group1
所以可见 topic和consumer group一一对应.
消费者offset
key是consumergroupId+topic+分区号
value是offset的值.消费者rebalance机制
kafka好用的工具 kafka-manager
截屏2025-01-08 23.46.52.png
以32G内存的机器为例
xms xmx 最大,最小堆内存,元空间大小
垃圾收集器G1选择
MaxGCPauseTime 最大停顿时间50ms, region大小为16m.
-- 线上问题及其优化
ack=0,ack=1,ack=-1或者all.
- 消费幂等
如果配置了重试机制,因为网络问题导致发送端超时,重试机制生效。
这时候旧的延迟消息会被重新消费。
如果消费端配置的是自动提交,拉取一批数据后,没来得及提交,服务挂了,重启后会拉取一批重复的数据。所以消费端要做幂等。
- 消息乱序: (顺序消息)
- ack 不能为0
- 全链路有序,需要将消息发送到同一个topic下的同一个partition分区.
消费端只能有一个,但是可以在消费端起多个线程,队列去消费.
[图片上传失败...(image-9a2824-1736352335600)]
broker下topic相互备份,备份partition. 做数据冗余,同时也提升了性能.
消息挤压:
有bug大致消息挤压,发送到死信队列。 如果是消息过大,启动临时topic,起多个consumer group消费消息.幂等
开始enable.idempotence 即可。 保证重复发送的消息只接收一次-
事务
指的是一次性发送多条消息的事务一致性.
截屏2025-01-09 00.03.35.png
截屏2025-01-09 00.03.17.png
截屏2025-01-09 00.05.11.png
- 高性能
0拷贝,顺序写顺序度,batch操作,压缩处理,文件分区处理