1

有一些设计问题,希望根据您对 Kafka 和KafkaJS(任何此类库)的经验提供反馈:

  1. 分区是在 Kafka 中扩展的一种方式吗?如果我创建 3 个分区并且只有 1 个使用者,我是否会在这 2 个未使用的分区中丢失消息?如果我启动 2 个新消费者,KafkaJS是否会从专用分区管理新消费者的分配?在消费者中实现并行处理的唯一方法是eachBatch,可以用 eachMessage 完成并控制消息处理的速率吗?
  2. 扩大消费者规模的推荐方式是什么?分区/异步并行/增加消费者节点等?目前,我有 1 个节点每分钟消耗约 30 条消息,我的目标是扩展消费者,因为预期速率可能在约 2000 条以上。
4

1 回答 1

4

我将尝试对您的问题给出一般性的回答:

  • 分区是在 Kafka 中扩展的一种方式吗?

    • 是的,分区将允许拆分数据和水平扩展
  • 如果我创建 3 个分区并且只有 1 个使用者,我是否会在这 2 个未使用的分区中丢失消息?

    • 不,消费者将从所有 3 个分区中读取
  • 如果我启动 2 个新消费者,KafkaJS 是否会从专用分区管理新消费者的分配?

    • 是的,当旋转新的消费者时,他们会进行通信,并且会有一个重新平衡过程来为每个消费者分配 1 个分区
  • eachBatch 是在消费者中实现并行处理的唯一方法吗,可以用 eachMessage 完成并控制消息处理的速率吗?

    • 不幸的是,我没有足够的知识来回答它:(
  • 扩大消费者规模的推荐方式是什么?

    • 最好的方法是在消费者和分区之间建立 1:1 的关系,以便在需要时启动新的消费者。为什么?基本上,它比并发更容易处理
于 2021-01-31T15:42:41.457 回答