【问题标题】:Kafka - Long running job decreases through putKafka - 长时间运行的作业会降低吞吐量
【发布时间】:2023-02-04 04:18:51
【问题描述】:

我的消费者组中有三个分区和三个消费者。

分配给 partition1 的作业 A、B
分配给 partition2 的作业 C、D
分配给分区 3 的作业 E、F

作业 C、D、E、F 完成时间不到 20 秒,但作业 A 需要 30 分钟才能完成。 B 如果执行将需要 10 秒才能完成,但被卡在 A 后面。B 将不得不等待 30 分钟,尽管有两个消费者闲置。

如果有消费者闲置,我该如何解决这个问题而不让 B 卡住。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    这真的不是 Kafka 可以解决的问题。另外,您不能在任何分区上有超过一个消费者,因此从消费者组的角度来看,“A,B”实际上只是“A”。如果您想“增加吞吐量”,则需要将阻塞的“处理”逻辑与事件消耗分离,并权衡跳过、复制或乱序处理事件。

    例如,methodA(record) 做一件事,需要 30 分钟。这与 Kafka 完全无关,因为您执行了阻塞功能。没有更多细节,您只需要重写它就不会阻塞太久。否则,执行类似 new Thread(() => methodA(record)).start() 的操作(在后台运行它,继续消耗并启动更多线程)。

    但是,完成后,发送到 A-completed 主题,“消费者 B”然后读取并运行 methodB(recordFromA)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2018-08-03
      相关资源
      最近更新 更多