Kafka Connect vs Streams for sinks

Chr*_*ris 9 apache-kafka apache-kafka-streams apache-kafka-connect

我试图了解 Connect 为您购买了什么而 Streams 没有。我们有应用程序的一部分,我们想在其中使用一个主题并写入 mariadb。

我可以用一个简单的处理器来完成这个。读取记录,存储在状态存储中,然后批量插入到 mariadb 中。

为什么这是一个坏主意?JDBC Sink Connector 给你带来了什么?

Rob*_*att 19

好问题!关键在于使用正确的工具来完成工作。Kafka Connect 的特定目的是在源系统和 Kafka 之间进行流式集成,或者从 Kafka 向下到其他系统(包括 RDBMS)。

Kafka Connect 给你什么?

  • 可扩展性;您可以部署多个工作人员,Kafka Connect 将在他们之间分配任务
  • 弹力; 如果一个节点出现故障,Kafka Connect 将重新启动另一个工人的工作
  • 便于使用; 连接器存在于许多技术中,因此实现连接器通常意味着只需几行 JSON
  • 模式管理;支持 JSON 模式,与 Avro 模式注册表完全集成,Protobuf 社区的可插拔转换器
  • 使用单消息转换进行内联转换
  • 所有集成任务的统一和集中管理和配置

这并不是说您不能在 Kafka Streams 中执行此操作,但是当 Kafka Connect 为您提供开箱即用的功能时,您最终将不得不自己编写大量代码。以同样的方式,您可以使用 Consumer API 和一堆定制代码来执行 Kafka Streams API 为您提供的流处理,同样您可以使用 Kafka Streams 将数据从 Kafka 主题获取到数据库中——但为什么要这样做呢?

如果您需要在将数据发送到接收器之前对其进行转换,那么推荐的模式是将转换与发送分离。转换 Kafka Streams(或 KSQL)中的数据并将其写回另一个 Kafka 主题。使用 Kafka Connect 侦听该新主题并将转换后的消息写入目标接收器。

  • 只想添加一个很好的答案:Kafka Streams 不是为了与外部系统通信而设计的。这可能会对处理保证等产生多重影响。特别是,如果您连接到外部系统,则恰好一次处理会中断。-- 还有一个关于解耦的问题:如果你的外部系统出现故障,Kafka Streams 很可能会崩溃。然而,Kafka Connect 可以无缝地为您处理这种情况。 (2认同)