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-消费最佳实践/
作者
Noctis64
发布于
2024年10月8日
许可协议