【问题标题】:What exactly is StreamTask in StreamThread in kafka streams?kafka 流中 StreamThread 中的 StreamTask 到底是什么?
【发布时间】:2020-01-18 12:11:16
【问题描述】:
我试图了解 Kafka Stream 是如何在幕后工作的(更好地了解它),并遇到了 confluent link,它真的很棒。
它表示两个术语,即:StreamThreads 和 StreamTasks。
我无法理解StreamTasks 到底是什么?
- 是
StreamThread执行的吗?
- 根据文档,
StreamThreads 可以有多个StreamTasks,所以不会有任何数据共享,这个线程不会运行得更慢吗? StreamThread 如何“运行” 多个StreamTasks?
任何简单的解释都会有很大的帮助。
【问题讨论】:
标签:
apache-kafka
apache-kafka-streams
【解决方案1】:
“任务”是可以并行完成的工作的逻辑抽象(即,可以相互独立处理的东西)。 Kafka Streams 基本上为每个输入主题分区创建一个任务,因为不同分区中的数据可以相互独立地处理(这是一种简化,但如果您有一个输入主题,则成立;对于连接,它有点不同)。
StreamThread 基本上是一个 JVM 线程。任务分配给StreamsThread 执行。在当前的实现中,StreamThread 基本上循环所有任务并为每个任务处理一些输入数据。在这期间,StreamThread(即使用KafkaConsumer)轮询代理以获取所有分配任务的新数据。
由于任务是相互独立的,因此您可以运行与任务一样多的线程。对于这种情况,每个线程将只执行一个任务。