【问题标题】:Kafka Stream Thread Count double expectedKafka Stream Thread Count 双倍预期
【发布时间】:2019-01-06 02:20:11
【问题描述】:

如果我创建一个简单的拓扑,其中有一个源和一个处理器,我会在控制台中获得预期的双倍 StreamThread。

例如,如果我将线程设置为 1 并且有一个分区,我会看到 2 个流线程。如果我设置为 20 个线程并有 20 个分区,我会看到 40 个流线程。

基于Kafka Streams thread number,我预计这些数字的一半。

我配置有问题还是这是预期的?

编辑: 在 stream = new KafkaStreams(topology, streamsConfig); 之后被称为我只看到它创建了 20 个线程。

在调用 stream.start() 之后,我看到这 20 个线程从 CREATED 转换为 RUNNING。

只是在初始化的后期才创建其他 20 个线程。看起来 StreamsBuilderFactoryBean#start() 然后在拓扑不包含任何内容的情况下被调用。看起来我要么需要阻止它以某种方式被调用,要么删除我的创建过程。不确定什么是首选。

【问题讨论】:

  • “在控制台中”——这是什么意思?
  • 在 intellij 中调试控制台终端我看到如下语句:INFO 6845 --- [-StreamThread-1] o.a.k.s.p.internals.StreamThread : stream-thread [rater-broker-fcfa7c57-7e0c-45c2-a09c -7ab35913c346-StreamThread-1] 开始
  • 如果您在 StreamConfig 中的线程上进行了配置,您应该只会看到 StreamThread-1。没有把握。你能仔细检查一下配置吗?它也被记录了。此外,您可以通过KafkaStreams#localThreadMetadata() 验证正在运行的线程数。最后,每个线程对应于底层消费者组的一个成员——因此,您也可以检查组中的成员数量。
  • 当我看到 streamthread-40 时,我确认流配置包含“num.stream.threads”->“20”并且 localThreadMetadata() 返回 20。我不确定你的最后一点是什么意思潜在消费者群体。
  • 一个 Kafka Streams 应用程序使用 application.id 作为 group.id 形成一个消费者组。每个线程创建一个属于该组的消费者。因此,消费者组的大小应该告诉您真正运行的线程数。您可以通过命令行工具bin/kafka-consumer-groups.sh 检查消费者组。我假设你看到了从 1 到 40 的所有数字(仍然不知道这是怎么发生的)。因为 localThreadMetadata 返回 20,但似乎只有 20 个线程在运行……顺便说一句:你使用什么版本?

标签: apache-kafka-streams


【解决方案1】:

原来@EnableKafkaStreams 注解会为你启动kafka流。由于我没有创建拓扑 bean,因此没有冲突,因为它是一个空拓扑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2020-04-08
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多