Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 在同一实例中执行StreamTasks与在多个实例中执行StreamTasks之间的差异_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Apache kafka 在同一实例中执行StreamTasks与在多个实例中执行StreamTasks之间的差异

Apache kafka 在同一实例中执行StreamTasks与在多个实例中执行StreamTasks之间的差异,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,假设我有一个包含3个分区的主题 方法1:我运行一个Kafka Streams实例,它启动3个任务[0\u 0,0\u 1,0\u 2],每个任务从一个分区消耗。 方法2:我启动了同一streams应用程序的三个实例,这里又启动了三个任务,但现在,它分布在创建的三个实例中。 哪种方法更可取?为什么? 在方法1中,所有任务是否作为同一线程的一部分运行,而在方法2中,它们运行在不同的线程上,或者是不同的? 考虑到streams应用程序具有非常简单的拓扑结构,并且只映射单个流中的值。默认情况下,单个Ka

假设我有一个包含3个分区的主题
方法1:我运行一个Kafka Streams实例,它启动3个任务[0\u 0,0\u 1,0\u 2],每个任务从一个分区消耗。
方法2:我启动了同一streams应用程序的三个实例,这里又启动了三个任务,但现在,它分布在创建的三个实例中。
哪种方法更可取?为什么?
在方法1中,所有任务是否作为同一线程的一部分运行,而在方法2中,它们运行在不同的线程上,或者是不同的?


考虑到streams应用程序具有非常简单的拓扑结构,并且只映射单个流中的值。默认情况下,单个
KafkaStreams
实例运行一个线程,因此在“方法1”中,所有三个任务都由单个线程执行。在“方法2”中,每个任务都由自己的线程执行。注意,您还可以通过
num.stream.threads
配置参数配置多线程前置
KafkaStreams
实例。如果将“方法1”设置为
3
,则两种方法大致相同。您需要多少线程取决于您的工作负载,即每个时间单位需要处理多少消息以及计算的成本。这还取决于硬件:对于单核CPU,配置多个线程可能没有意义,但您应该在多台机器上部署多个实例以获得更多硬件。因此,如果您的工作负载是轻量级的,那么一个单线程实例就足够了

还要注意的是,您可能会受到网络限制。在这种情况下,启动更多线程没有帮助,但您也希望扩展到多台机器

最后要考虑的是容错性。即使单个线程/实例的功能足够强大,不会出现延迟,但如果实例崩溃,该怎么办?如果您只有一个实例,那么整个计算将下降。如果您运行两个实例,第二个实例将接管所有工作,并且您的应用程序保持在线