【问题标题】:Kafka Connect vs Streams for Sinks [closed]Kafka Connect vs Streams for Sinks [关闭]
【发布时间】:2019-06-12 22:22:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: apache-kafka apache-kafka-streams apache-kafka-connect


    【解决方案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 类。如果您有没有 schemapayload 字段的纯 JSON,那么它被视为“无模式”,并且您可以应用于这些记录的操作有限。如果将记录存储在 Mongo 或 Elasticsearch 中,这可能会很好,但在 RDBMS 中则效果不佳
    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2019-03-30
    • 2018-01-19
    • 2021-12-17
    • 2017-01-20
    • 2017-03-15
    相关资源
    最近更新 更多