当前位置: 首页 > 知识库问答 >
问题:

多分区的Apache Kafka消息顺序

席安康
2023-03-14

根据Apache Kafka文档,消息的顺序可以在一个分区或一个主题中的一个分区内实现。在这种情况下,我们得到的并行性好处是什么,它相当于传统的MQ,不是吗?

共有1个答案

洪开济
2023-03-14

在Kafaka中,并行性等于一个主题的分区数。

例如,假设您的消息是基于user_id进行分区的,并考虑4条消息的user_id分别为1、2、3和4。假设您有一个包含4个分区的“Users”主题。

由于分区是基于user_id的,因此假设user_id为1的消息将转到分区1,user_id为2的消息将转到分区2,依此类推。

还假设您有4个主题的消费者。由于您有4个消费者,Kafka会将每个消费者分配到一个分区。所以在这种情况下,只要推送4条消息,它们就会立即被消费者消费。

如果主题有2个消费者,而不是4个,那么每个消费者将处理2个分区,消耗的吞吐量将几乎为一半。

为了完全回答您的问题,Kafka只提供了一个分区内消息的总顺序,而不是主题中不同分区之间的消息。

即,如果分区2中的消耗非常慢,而分区4中的消耗非常快,则USER_ID4的消息将在USER_ID2的消息之前被消耗。Kafaka就是这样设计的。

 类似资料:
  • 我已经在kafka上工作了相当长的六个月,我对用户延迟和存储到主题分区中的数据有一些疑问。 问题1:最初,当我开始阅读Kafka并了解如何使用Kafka的功能时,我被教导说,一个只有一部分和一个复制因子的主题会创造奇迹。经过相当长的六个月的工作,将我的项目迁移到live之后,使用我的主题消息的消费者开始给我一个延迟。我阅读了许多关于消费者延迟的堆栈溢出答案,得出结论,如果我增加某个主题的分区和复制

  • 阅读这篇关于主题分区中消息排序的文章:https://blog.softwaremill.com/does-kafka-really-guarantee-the-order-of-messages-3ca849fd19d2 允许在不设置最大值的情况下重试。航班请求。每连接到1可能会更改记录的顺序,因为如果将两个批发送到单个分区,第一个失败并重试,但第二个成功,则第二个批中的记录可能会首先出现。 根

  • 我已经创建了要将它们连接在一起的kstream。两个流的输出如下所示: 流1: 流2: 我想创建这两个Stream的连接流(内连接),所以我创建了以下KStream: 在这个KStream中,我只使用了一个连接,我正在更改输出消息的格式,仅此而已。 通过一个例子,我将解释我想做什么: 在窗口内发布以下消息: 流1 流2 加入流 出版的是什么 我想出版什么 总之,我只想在窗口中发布最新消息,而不是所

  • 主要内容:1 start启动服务定时锁定消息队列,1.2 lockAll锁定所有消息队列,2 submitConsumeRequest提交消费请求,3 ConsumeRequest执行消费任务,3.1 tryLockLaterAndReconsume尝试延迟加锁并重新消费,3.2 takeMessages拉取消息,4 processConsumeResult处理消费结果,4.1 commit提交消息,4.2 checkReconsumeTimes检查重试次数,,,基于RocketMQ relea

  • 我想知道,在什么情况下,具有相同分区键的消息会进入不同的分区。 我使用下面给出的命令运行了属于同一组的两个消费者在控制台中监听一个主题: 我使用“纳米/Kafka-php”库将消息放入带有键 的主题。当我发送多个这样的消息时,我发现很少有消息转到第二个消费者,而大多数消息都发送给消费者1。 由于我对所有消息使用相同的密钥,因此我希望所有消息都由同一个使用者使用。每个使用者都绑定到每个分区。 我使用

  • 我正在开发一个使用的软件。我有一个用户订阅了多个主题,我想知道是否有一个订单接收来自这些主题的消息。我在我的电脑上尝试了一些组合,但我需要确定这一点。例 null [编辑]我想指定这两个主题各有一个分区,并且只有一个生产者和一个消费者。我需要首先阅读来自第一个主题的所有消息,然后阅读来自另一个主题的消息