Kafka|消费最佳实践
消息消费顺序
Kafka 在发送消息的时候,需要指定 topic, partition, key,data(数据) 4 个参数
其中这个 key 是用来保证消息有序的重要概念
发送的消息都有一个 offset ,如果一个 topic 下只保证一个 partition 的话,光靠 offset 确实可以实现有序
但是为了并发吞吐,partition 在 topic 下一定是多个存在的。因此 key 的出现就是为了解决这个问题
同一个 key 的消息可以保证只发送到同一个 partition
所以我们在业务代码中,对于一个场景下需要保证强顺序消费的业务场景,可以在发消息的时候,多条消息按顺序发送,并指定唯一的 key
消息丢失的情况&解决方案
生产者侧消息丢失
这个是最基本的,一般来说生产者都是异步发消息,那么就会存在可能 CPU 资源不足,或者极端状况下生产者网络问题导致消息发送失败的情况
这种情况比较好解决, 可以通过设置发送重试次数+调大重发间隔 来解决
消费者侧消息不一致
这里和 Kafka 的提交方式有关
Kafka 提供了自动提交和消费者手动提交来标记 topic 中消息被消费(实际上就是修改 Partition 中的 offset) 的两种方式:
- 在消费者侧自定义手动提交
- Kafka 侧自动提交
两种实际上都会导致消费者侧消息不一致的问题:
- Kafka自动提交,消费者可能还没开始消费就挂了,但是消息已经标记为提交,出现消息丢失
- 消费者侧手动提交,可能极端状况下还没提交但是消费了,进程挂了,那么就会出现重复消费的情况
Kafka 内部消息不一致
这种情况主要是配置说明,一般配置正确不会发生
Kafka|消费最佳实践
http://example.com/2024/10/08/Kafka-消费最佳实践/