Kafka Connect vs Streams for Sinks [关闭]
Posted
技术标签:
【中文标题】Kafka Connect vs Streams for Sinks [关闭]【英文标题】:Kafka Connect vs Streams for Sinks [closed] 【发布时间】:2019-06-12 22:22:48 【问题描述】:我试图了解 Connect 能为您带来什么,而 Streams 没有。我们在应用程序的一部分中要使用一个主题并写入 mariadb。
我可以用一个简单的处理器来完成这个。读取记录,存储在状态存储中,然后批量插入到 mariadb。
为什么这是个坏主意? JDBC Sink Connector 给你带来了什么?
【问题讨论】:
【参考方案1】:好问题!这一切都是为了使用正确的工具来完成工作。 Kafka Connect 的特定目的是源系统和 Kafka 之间的流式集成,或者从 Kafka 到其他系统(包括 RDBMS)的流式集成。
Kafka Connect 能为您带来什么?
可扩展性;您可以部署多个工作人员,Kafka Connect 将在他们之间分配任务 弹性;如果一个节点发生故障,Kafka Connect 将在另一个工作人员上重新开始工作 易于使用;存在多种技术的连接器,因此实现连接器通常只需要几行 JSON 模式管理;支持 JSON 中的模式,与 Avro 的模式注册表完全集成,来自社区的 Protobuf 的可插拔转换器 单消息转换的内联转换 为您的所有集成任务统一集中管理和配置这并不是说您不能在 Kafka Streams 中执行此操作,但是当 Kafka 为您提供开箱即用的代码时,您最终将不得不自己编写很多代码连接。就像您可以使用 Consumer API 和一堆定制代码来执行 Kafka Streams API 为您提供的流处理一样,同样您可以使用 Kafka Streams 来获取来自 Kafka 主题的数据到数据库中——但你为什么要这样做?
如果您需要在将数据发送到接收器之前对其进行转换,那么推荐的模式是将转换与发送分离。转换 Kafka Streams(或 KSQL)中的数据并将其写回另一个 Kafka 主题。使用 Kafka Connect 收听该新主题并将转换后的消息写入目标接收器。
【讨论】:
只想添加一个出色的答案:Kafka Streams 并非旨在与外部系统通信。这可能对处理保证等产生多重影响。特别是,如果您连接到外部系统,则恰好一次处理会中断。 ——这也是一个关于解耦的问题:如果你的外部系统出现故障,Kafka Streams 很可能会崩溃。然而,Kafka Connect 可以无缝地为您处理这种情况。 @Robin Moffatt,关于您对在发送到接收器之前进行转换的评论。连接期望数据是特定格式吗?比如记录是json,字段匹配表的列名? @Chris Connect 使用内部Struct
类。如果您有没有 schema
和 payload
字段的纯 JSON,那么它被视为“无模式”,并且您可以应用于这些记录的操作有限。如果将记录存储在 Mongo 或 Elasticsearch 中,这可能会很好,但在 RDBMS 中则效果不佳以上是关于Kafka Connect vs Streams for Sinks [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Akka Stream Kafka vs Kafka Streams