【问题标题】:Scaling pattern matched Kafka consumers缩放模式匹配 Kafka 消费者
【发布时间】:2020-01-08 17:55:46
【问题描述】:

我有一个场景,其中有多个 Kafka 主题(每个主题有一个分区)和一个消费者组来消费记录。我在消费者组中使用单个模式匹配消费者,它匹配所有主题,因此消费所有主题中的所有记录。

我现在想扩大规模,让多个消费者(在同一个消费者组中)收听所有主题。但是,这似乎不起作用,因为所有记录仅由组中的第一个消费者使用,从而使组中的其他消费者无用。此外,我使用ExecutorService 将消费者作为单独的线程运行。

我怎样才能做到这一点? 以下是我的代码:

Pattern pattern = Pattern.compile(topicPattern); consumer.subscribe(pattern);

上面代码中发送的模式与所有主题的名称匹配, 例如。

如果主题名称是sample_topic_1sample_topic_2 等,我们将其与sample_topic_*$ 匹配。

【问题讨论】:

  • 您是否需要一个特定的消费群体?
  • 是的,我受限于可以创建的组的数量,在我的例子中是一个。
  • 受什么限制?

标签: java apache-kafka kafka-consumer-api


【解决方案1】:

您描述的方法应该适用于您发布的代码。但是,这可能是没有足够数据供多个消费者使用的情况。或者,数据可能以“突发”的形式出现,小到足以容纳一个批次。

尽管理论上 Kafka 中的负载是分布在同一个消费者组的所有消费者中的,但在实践中,如果只有一个“批次”的数据,那么第一个消费者可以抓取所有数据,并且没有任何剩余其他人。这意味着:

  • 您发送的数据不足,无法将其分发给所有消费者(尝试发送更多数据来验证这一点),或者
  • 你有一个奇怪的配置,你配置的批次是巨大的,和/或 linger.ms 属性配置得非常高,或者
  • 以上两者的结合。

我建议先尝试发送更多数据,然后看看是否能解决问题。如果没有,请尝试缩减到仅 1 个消费者,验证它是否仍在工作。然后再向该消费者组添加一个消费者,并查看行为是否发生变化。

【讨论】:

  • 我将数据量增加了大约 10 倍,并且还使用了多个生产者线程。我使用的是 Kafka 开箱即用的默认配置。
猜你喜欢
  • 2018-02-05
  • 2017-06-22
  • 2019-09-07
  • 1970-01-01
  • 2014-07-30
  • 2016-09-19
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多