【问题标题】:Can I attach multiple transformers/processors to a single stream in Apache Kafka我可以将多个转换器/处理器附加到 Apache Kafka 中的单个流吗
【发布时间】:2018-05-20 08:46:02
【问题描述】:

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

请在下面找到用例:

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

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

由于我们对 Kafka 比较陌生,因此我们不确定这种方法的优缺点,尤其是在状态存储/任务调度/多线程模型等 Kafka 内部。

请分享您的专家意见和经验 请注意,我们无法控制主题,无法为此设计创建新主题。设计必须仅对现有主题是可行的。

【问题讨论】:

标签: apache-kafka apache-kafka-streams


【解决方案1】:

Kafka Streams 允许您将逻辑拆分为多个处理器。在内部,Kafka Streams 实现了“深度优先”的执行策略。因此,每次您调用“转发”时,输出元组都会立即由下游处理器处理,并在下游处理完成后“转发”返回(注意,将数据写入主题并将其读回“破坏”内存管道 - - 因此,当将数据写入主题时,无法保证下游处理器何时会读取和处理这些记录。

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

只要您直接连接处理器(而不是通过主题),所有处理器都将属于相同任务。因此,不应该存在性能差异。

【讨论】:

  • 谢谢@Matthias,我会尝试并告诉你我的发现
猜你喜欢
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多