apache-kafka - Kafka Streams - 使用 through() 与 toStream() + to() 重用流

标签 apache-kafka apache-kafka-streams

我想知道在 .toStream() + .to() 的流引用上使用 .through() 重用流的区别

使用 .through()
KStream<String, String> subStream = mainStream .groupByKey(..) .aggregate(..) .toStream(..); .through("aggregate-topic", ..); // Then use the (new) stream from .through() to create another topic
与使用 .toStream() + .to()
KStream<String, String> subStream = mainStream .groupByKey(..) .aggregate(..) .toStream(..); subStream.to("aggregate-topic", ..); //reuse the existing subStream from toStream() to create another topic
我已经实现了一个使用后者的功能,因为在我学习 through() 方法之前,这是有意义的。

我现在好奇的是这两种选择的内部情况;选择一个选项而不是另一个选项有什么好处/坏处吗?

最佳答案

是的,存在差异和不同的权衡:

1) 使用 through() 的第一个版本将创建一个“线性计划”,并将拓扑拆分为两个子拓扑。请注意, through("topic")to("topic")builder.stream("topic") 完全相同。

mainStream -> grp -> agg -> toStream -> to -> TOPIC -> builder.stream -> subStream

第一个子拓扑将从 mainStreamto()"aggregate-topic" 将它与由 builder.stream() 组成的第二个子拓扑分开,并输入 subStream 。这意味着,因为所有数据首先写入 "aggregate-topic",然后再读回。这将增加端到端处理延迟并增加额外读取操作的代理负载。优点是,两个子拓扑都可以独立并行化。它们的并行性是独立的,并由它们对应的输入主题分区的数量决定。这将创建更多的任务,从而允许更多的并行性,因为两个子拓扑都可以在不同的线程上执行。

2)第二个版本将创建一个“分支计划”,并将作为一个子拓扑执行:
mainStream -> grp -> agg -> toStream -+-> to -> TOPIC
                                      |
                                      + -> subStream

toStream() 之后,数据被逻辑广播到两个下游操作符。这意味着,没有通过 "aggregate-topic" 的往返,但记录在内存中转发到 subStream 。这减少了端到端延迟,并且不需要从 Kafka 集群读回数据。但是,您可以 reduce task 并因此降低最大并行度。

关于apache-kafka - Kafka Streams - 使用 through() 与 toStream() + to() 重用流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53112384/

相关文章:

apache-kafka - kafka为什么不创建主题? bootstrap-server不是公认的选项

apache-kafka - 外行术语中的流处理和 Kafka 流是什么?

apache-kafka-streams - Kafka Stream 拓扑优化

java - Kafka Streams 应用程序死亡,错误代码为 "StreamsException: Could not create internal topics."

kotlin - Kafka 使用 Kotlin 流式传输物化 View

apache-kafka - Dataproc 中的 Presto : configure a Kafka catalog

elasticsearch - kafka.common.KafkaException : Failed to parse the broker info from zookeeper from EC2 to elastic search

spring - Spring Integration Kafka 消费者的回滚偏移量

apache-spark - 无法使用 Kafka-Spark 集成找到 Set([topic,0]) 的领导者

apache-kafka - Kafka 流与 Kafka 消费者如何决定使用什么