Kafka 确保从主题优化并行消费

4ioopgfo  于 12个月前  发布在  Apache
关注(0)|答案(1)|浏览(74)

我对Kafka还很陌生,我将试着描述我所面临的问题和我正在思考的可能的解决方案。
在我的Node.js应用程序中,我有一个Kafka Topics链(比如3个),每个Topic都有一个消费者和一个分区。我选择单分区的原因是因为操作的顺序对我来说非常重要,我不希望由于重新平衡或其他原因而导致消息无序。
现在,有两个用户同时进行一些异步操作。让我们假设这些操作一个接一个地连续进行。用户1执行5000次操作。当用户1已经开始轰炸主题时,第二个用户决定也进行5次连续操作。
我的观察是,如果一个操作需要大约5秒,user 2的操作需要超过5秒,在最坏的情况下甚至需要30-45秒。这应该发生在一个时间可以有超过2个用户。
我正在考虑实现一个消息键分区来解决这个问题。我的意思是,我将有一个哈希函数,它将在对userID进行哈希处理时给出给予一个常量,这个常量将决定用户的分区,因此也将确保排序。我对这种做法的质疑是:

  • 如果我决定在将来添加更多的分区怎么办?
  • 我将如何使单个消费者从不同的分区侦听。我需要多个消费者吗?
  • 同样的散列和消息键分区必须发生在所有3个主题上,对吗?
    请让我知道我是否在正确的方向上前进,或者你有什么建议。如果我需要详细说明我的问题或用例,请告诉我。
iqjalb3h

iqjalb3h1#

我决定将来添加更多的分区
你会失去秩序。现有数据将保留在其现有的单个分区中。新数据将到达计算分区
使单个消费者从不同分区侦听
这是自动的,但多个消费者会有所帮助
同样的散列和消息键分区必须发生在所有3个主题上,对吗?
这不是必需的,除非您要使用Kafka Streams,例如,其中连接的主题之间的分区计数需要相同
按用户分区不是一个好主意,除非你有一个固定的用户数。例如,您可以给予每个用户一个数字ID,然后使用10个分区来指定该ID中的第一个数字,而不是每个用户一个分区。否则,按“操作”分区并在事件中包含用户信息可能效果更好,但这取决于您的排序要求。

相关问题