kafka是有序的吗?如何保证有序?

首先,Kafka无法保证消息的全局有序性,这是因为Kafka的设计中允许多个生产者并行地向同一个主题写入消息。而且,一个主题可能会被划分为多个分区,每个分区都可以在独立的生产者和消费者之间进行并行处理。因此,生产者将消息写入各自的分区,而这些分区可能会在不同的时间接收到消息,从而导致消息在整个主题中的顺序不确定。

实际上的发布订阅模型可能是这样子的

保证有序性有两种方式:全局有序和局部有效

全局有序

如果要保证消息的全局有序,首先只能由一个生产者往 Topic 发送消息,并且一个 Topic 内部只能有 一个队列(分区)。消费者也必须是单线程消费这个队列。这样的消息就是全局有序的! 不过一般情况下我们都不需要全局有序,即使是同步 MySQL Binlog 也只需要保证单表消息有序即可。

部分有序

因此绝大部分的有序需求是部分有序,部分有序我们就可以将 Topic 内部划分成我们需要的队列数,把 消息通过特定的策略发往固定的队列中,然后每个队列对应一个单线程处理的消费者。这样即完成了部 分有序的需求,又可以通过队列数量的并发来提高消息处理效率。

只要保证了同类的数据发送到同一个队列就可以实现局部有序

相关推荐
m0_646429971 小时前
RabbitMQ 核心知识总结(生产实战版)
分布式·rabbitmq
DBA_G3 小时前
GBase 8c分布式数据库客户端工具 gsql
数据库·分布式
chunyublog3 小时前
Spark 词频统计练习
大数据·分布式·spark
ClouGence4 小时前
开源数据库管理工具 CloudDM 4.4.0 发布,新增 Kafka、SAP HANA 数据源
数据库·kafka
acrel75 小时前
高速公路分布式光伏并网电能质量与安全保护方案应用
分布式·安全
RobinXYuan5 小时前
【Kafka 源码手记】01 从消息队列到 Event Streaming
kafka·源码阅读
IT小小猪6 小时前
# Hadoop 3.3.6 完全分布式集群部署知识库
hadoop·分布式·eclipse
此时不提桶,更待何时7 小时前
06-24-B-RabbitMQ面试与生产事故实战
分布式·面试·rabbitmq
来福猿7 小时前
分布式锁 Redis 实现源码分析:SETNX、过期时间与可重入设计
数据库·redis·分布式
Pniubi1 天前
分布式锁分类讲解
分布式