【发布时间】: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 个线程在运行……顺便说一句:你使用什么版本?