【问题标题】:How kafka scales out on a long processing durationkafka 如何在处理时间长的情况下进行横向扩展
【发布时间】:2022-12-11 19:26:15
【问题描述】:

假设我有无限的计算能力

  1. 我有 1 个主题和 10 个分区
  2. 我有 1 个消费者组
  3. 每个事件处理需要1秒
  4. 大量事件开始产生

    现在,由于处理需要一段时间,并且单个组中的 Kafka 消费者被限制为分区数(在本例中 = 10)

    它导致消费率 << 事件产生率的情况。

    在这个用例中,我如何利用我的无限计算来提高消费率?

    (据我所知,创建更多的消费者群体并不能解决我的问题,因为每个消费者群体都必须从 offset = 0 开始)

【问题讨论】:

  • 问题中对卡夫卡架构的误解很少。您可以有超过 10 个消费者组从具有 10 个分区的主题中消费 - 在一个组中您最多可以有 10 个活跃的消费者从具有 10 个分区的主题中消费。第二件事,当我们谈论新的消费者群体时,您没有义务从偏移量 0 读取消息,auto.offset.reset 属性对此负责。

标签: apache-kafka kafka-consumer-api


【解决方案1】:

Kafka 对每次轮询的记录进行批处理。默认情况下,这是 500 条记录,这意味着下一次轮询需要 500 秒(超过 8 分钟)...默认 max.poll.interval.ms(轮询之间所需的时间)是 5 分钟。因此,最起码,你需要增加超时,或者减少max.poll.records 300 左右。

或者,您可以将数据推送到持久处理队列中,而不按顺序迭代那些轮询的批次。 Confluent 维护着一个并行的消费者项目,可以帮助解决这个问题。

不清楚您是如何想出只有 10 个分区的,但添加更多分区会进一步分配负载,您可以添加更多消费者。

【讨论】:

    猜你喜欢
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2012-10-30
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多