我可以在Apache Kafka中将多个转换器/处理器连接到单个流

时间:2018-05-20 08:46:02

标签: apache-kafka apache-kafka-streams

在所有示例中,我都看到了Kafka的简单单变换器/处理器拓扑。我怀疑的是,我们是否可以通过分解应用于单个输入流的多个变换器/处理器来模块化应用程序逻辑。

请在下面找到用例:

当前的应用程序配置是一个单一的处理器,包含所有处理逻辑任务,如过滤,验证,应用程序逻辑,延迟(Kafka对于dbs来说太快)和调用SP / push到下游。

但我们现在计划通过将每项任务分解为Kstream的独立处理器/变换器来解耦所有这些操作。

由于我们对Kafka来说相对较新,我们不确定这种方法的优缺点,尤其是Kafka内部结构,如状态存储/任务调度/多线程模型。

请分享您的专家意见和经验 请注意,我们无法控制主题,因此无法为此设计创建新主题。该设计必须仅适用于现有主题。

enter image description here

1 个答案:

答案 0 :(得分:1)

Kafka Streams允许您将逻辑分成多个处理器。在内部,Kafka Streams实现了一个深度优先的"执行战略。因此,每次你打电话"转发"输出元组由下游处理器立即处理,并且"转发"下游处理完成后返回(注意,将数据写入主题并将其读回"中断"内存中的管道 - 因此,当数据写入主题时,无法保证下游处理器将阅读并处理这些记录。)

如果您具有在多个处理器之间共享的状态,则需要将该存储连接到需要访问存储的所有处理器。商店上的执行将是单线程的,因此应该没有性能差异。

只要您直接连接处理器(而不是通过主题),所有处理器都将成为相同任务的一部分。因此,不应该有性能差异。