确保主题的优化并行消耗

问题描述 投票:0回答:1

我对 Kafka 很陌生,我将尝试描述我面临的问题以及我正在考虑的可能解决方案。

在我的 Node.js 应用程序中,我有一个 Kafka 主题链(比如 3 个),每个主题也有一个消费者和一个分区。我选择单个分区的原因是因为操作顺序对我来说非常重要,我不希望由于重新平衡或其他原因而导致消息混乱。

现在有2个用户同时进行一些异步操作。让我们假设这些操作是一个接一个连续进行的。 User1 执行了 5000 次操作。当用户 1 已经开始轰炸主题时,第二个用户也决定进行 5 次连续操作。

我的观察是,如果一个操作大约需要 5 秒,则 user2 的操作将花费超过 5 秒,在最坏的情况下甚至需要 30-45 秒。这应该并行发生,因为一次可以有超过 2 个用户。

我正在考虑实施“消息键控分区”来解决这个问题。我的意思是我将有一个哈希函数,它会在对用户 ID 进行哈希处理时给出一个常量,该常量将决定用户的分区,从而确保排序。我对这种方法的疑问是:

如果我决定将来添加更多分区怎么办?
  • 我将如何让单个消费者从不同的分区监听。我需要多个消费者吗?
  • 所有 3 个主题都必须进行相同的哈希和消息键控分区,对吧?
如果我正在朝着正确的方向前进或者您有任何建议,请告诉我。如果我需要详细说明我的问题或用例,请告诉我。

apache-kafka kafka-consumer-api
1个回答
0
投票
决定将来添加更多分区

您将失去订单。现有数据将保留在现有的单个分区中。新数据将到达计算分区

使单个消费者从不同的分区监听

这是自动的,但多个消费者会有所帮助

所有 3 个主题都必须进行相同的哈希和消息键控分区,对吗?

这不是一个要求,除非您要使用 Kafka Streams,例如,连接的主题之间的分区计数需要相同

按用户分区并不是一个好主意,除非用户数量固定。例如,您可以为每个用户指定一个数字 ID,然后使用 10 个分区来指定该 ID 中的第一个数字,而不是为每个用户分配一个分区。否则,按“操作”分区并在事件中包含用户信息可能会更好,但这取决于您的订购要求。

© www.soinside.com 2019 - 2024. All rights reserved.