【问题标题】:When is a Kafka connector preferred over a Spark streaming solution?Kafka 连接器何时优于 Spark 流解决方案?
【发布时间】:2020-09-23 10:12:25
【问题描述】:

使用 Spark 流,我可以读取 Kafka 消息并将数据写入不同类型的表,例如 HBase、Hive 和 Kudu。但这也可以通过对这些表使用 Kafka 连接器来完成。我的问题是,在哪些情况下我应该更喜欢连接器而不是 Spark 流解决方案。

另外,Kafka 连接器解决方案的容忍度如何?我们知道,通过 Spark 流,我们可以使用运行在多个节点上的检查点和执行器来进行容错执行,但是 Kafka 连接器如何实现容错(如果可能)?通过在多个节点上运行连接器?

【问题讨论】:

    标签: apache-spark apache-kafka apache-kafka-connect spark-structured-streaming


    【解决方案1】:

    因此,一般来说,从 Kafka 读取记录并将其发送到其他服务时,功能应该没有太大差异。

    Kafka Connect 在处理标准任务时可能更容易,因为它提供了开箱即用的各种连接器,因此很可能会减少编写任何代码的需要。因此,如果您只是想将一堆记录从 Kafka 复制到 HDFS 或 Hive,那么使用 Kafka 连接可能会更容易和更快。

    考虑到这一点,当您需要做一些非标准的事情时,Spark Streaming 会彻底接管,即如果您想对记录执行一些聚合或计算并将它们写入 Hive,那么您可能应该从开始。

    总的来说,我发现使用 Kafka connect 做一些不合标准的事情,例如将一条消息拆分为多个消息(假设它是 JSON 数组)非常麻烦,并且通常需要比在 Spark 中更多的工作。

    至于 Kafka Connect 容错,正如文档中所述,这是通过运行具有相同 group.id 的多个分布式工作人员来实现的,如果其中一个失败,工作人员会重新分配任务和连接器。

    【讨论】:

    • 这些连接器(至少是 Kafka 到 HDFS)是标准 Kafka 安装附带的,还是需要单独安装。
    • 我不认为它们是原版 Kafka 二进制文件的一部分 :)
    • AFAIK kafka connect 只是用于连接和获取/推送主题等安装的库,所有您必须单独执行的操作不是库的一部分。我建议您查看相应的文档。
    • Kafka 连接器是 jar 文件,用于从 kafka 中提取数据并推送到 kafka。当您必须从主题中提取大量数据时,这是最重要的方面。假设您对将被推送到主题的实时数据执行某种聚合,并且如果您希望将其保存并减少流程的代码,那么 kafka 连接器是最有用的!每当 ksqldb 创建一个新的流聚合或表时,它的数据就是一个主题。为了推动那个重要的聚合......连接器再次繁荣??
    【解决方案2】:

    在哪些情况下我应该更喜欢连接器而不是 Spark 流解决方案。

    “视情况而定”:-)

    1. Kafka Connect 是 Apache Kafka 的一部分,因此在安全性、交付语义等方面与 Apache Kafka 的集成更加紧密。
    2. 如果您不想编写任何代码,Kafka Connect 会更容易,因为它只是 JSON 来配置和运行
    3. 如果你还没有使用 Spark,Kafka Connect 可以说是更多 部署简单(运行 JVM,传入配置)
    4. 作为一个框架,Kafka Connect 更具可移植性,因为概念相同,您只需为每次要集成的技术插入适当的连接器
    5. Kafka Connect 为您处理所有棘手的问题,例如架构、偏移、重新启动、横向扩展等
    6. Kafka Connect 支持单消息转换,以便在数据通过管道时对数据进行更改(屏蔽字段、删除字段、更改数据类型等)。对于更高级的处理,您可以使用 Kafka Streams 或 ksqlDB 之类的东西。
    7. 如果您使用的是 Spark,而且它工作得很好,那么将其撕毁以改用 Kafka Connect 并不一定是谨慎的 :)

    另外,Kafka 连接器解决方案的容忍度如何? ... Kafka 连接器如何实现容错(如果可能)?

    1. Kafka Connect 可以在分布式模式下运行,在这种模式下,您可以跨节点拥有一个或多个工作进程。如果工作人员失败,Kafka Connect 会在剩余的任务之间重新平衡任务。如果您添加一个工作人员,Kafka Connect 将重新平衡以确保工作负载分布。这在 Apache Kafka 2.3 (KIP-415) 中得到了极大的改进
    2. Kafka Connect 使用 Kafka 消费者 API 并跟踪传递到 Kafka 本身的目标系统的记录的偏移量。如果任务或工作人员失败,您可以确定它将从正确的点重新启动。许多连接器也支持一次性交付(例如 HDFS、Elasticsearch 等)

    如果您想了解有关 Kafka Connect 的更多信息,请参阅 docs here 和我的 talk here。请参阅 list of connectors here 和教程视频 here。


    免责声明:我为 Confluent 工作,并且是 Kafka Connect 的忠实粉丝 :-)

    【讨论】:

      猜你喜欢
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 2018-06-14
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多