kafka保证消息有序性

kafka 保证有序性

背景:消息是按照生产顺序发布到 kafka 上

接着,会经历两个阶段:这两个阶段都可能会导致消息的乱序

  • 第一个阶段:根据 topic 将消息放到对应 partition

    如果是随机投放消息到多个 partition 中,这会导致需要被有序消费的消息被 kafka 并行处理。

    原因:partition是Kafka并行度调优的最小单元。

    解决方式:确保需要被有序消费的消息处于同一个 partition

    1. 建立只有一个分区的 topic
    2. 对该 topic 建立多个分区,但需要在发消息时指定 partition key,kafka 会进行 Hash 计算(这种比第一种可以提高该 topic 的吞吐量)
  • 第二个阶段:consumer 消费该 partition 的消息

    如果有多个消费者线程去消费,会导致乱序。

    原因:因为每个消费者线程都在内存中用个队列存放消息,它们之间是并发处理的。

    解决方式:确保需要被有序消费的消息处于同一个消费者线程

    1. 消费端使用单线程模型
    2. 使用多线程模型,但需要利用消息的唯一标识(可通过 Hash )将他们分配到同一个消费者线程上
相关推荐
方方洛9 分钟前
ray教程-18-性能调优与反模式
人工智能·分布式·机器学习
starzy19901 小时前
Kafka写数据入口:消息进了Broker之后交给谁
大数据·kafka
螺蛳粉 螺蛳粉3 小时前
CDH第七篇:CDH 集成 Kafka 实战:CSD + Parcel 组合拳,先装 ZooKeeper 是铁律
物联网·zookeeper·kafka·消息队列·parcel·cdh集成·csd
每天一道题5 小时前
分布式锁真的安全吗?从 Redis 锁、Lease 到 Fencing Token
redis·分布式·安全
小O的算法实验室8 小时前
IEEE TAES,多无人机通信故障下的分布式任务分配与压制干扰
分布式
Deng桑1 天前
分布式锁与幂等
分布式
Flynn Liang1 天前
物联网时序数据乱序问题全链路治理:从设备到存储的五层实战(附 Flink/Kafka/IoTDB 配置级代码)
flink·kafka·iot·iotdb·emqx·乱序·时序数据
wifi___1 天前
Redis分布式锁
数据库·redis·分布式
方方洛1 天前
ray教程-15-RayServe与LLM服务
人工智能·分布式·机器学习
m0_639906941 天前
MySQL 实现分布式锁:悲观锁、乐观锁、唯一索引锁
数据库·分布式·mysql