【问题标题】:Kafka design questions - Kafka Connect vs. own consumer/producerKafka 设计问题 - Kafka Connect 与自己的消费者/生产者
【发布时间】:2020-04-17 03:00:47
【问题描述】:

我需要了解何时使用 Kafka 连接与开发人员编写的自己的消费者/生产者。我们正在获得 Confluent 平台。另外,为了实现容错设计,我们是否必须从所有代理运行消费者/生产者代码(jar 文件)?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api apache-kafka-connect kafka-producer-api


    【解决方案1】:

    Kafka connect 通常用于将外部源连接到 Kafka,即生产/消费 to/from外部源from/to Kafka。

    你可以用连接器做的任何事情都可以通过 生产者+消费者

    现成可用的连接器仅便于将外部源连接到 Kafka,而无需开发人员编写低级代码。

    需要记住的几点..

    1. 如果源和接收器都是同一个 Kafka 集群,则连接器没有意义
    2. 如果您要从数据库执行更改数据捕获 (CDC) 并将其推送到 Kafka,则可以使用数据库源连接器。
    3. 资源限制:Kafka 连接是一个单独的进程。因此,请仔细检查您可以在资源和易于开发之间进行哪些权衡。
    4. 如果您正在编写自己的连接器,那就太好了,除非有人还没有编写它。如果您使用的是第三方连接器,则需要检查它们的维护情况和/或是否提供支持。

    【讨论】:

    • @cricket_007 在语句中添加通常怎么样?
    • 有它的有效用途。但不在同一个集群内
    【解决方案2】:

    我们是否必须从所有代理运行消费者/生产者代码(jar 文件)?

    不要在代理上运行客户端代码。为代理进程保留所有内存和磁盘访问。

    何时使用 Kafka 连接与自己的消费者/生产者

    根据我的经验,应该考虑这些因素

    1. 无论如何,您都计划部署和监控 Kafka Connect,并且有可用的资源来执行此操作。同样,这些不会在代理机器上运行
    2. 您不打算经常更改连接器代码,因为您必须重新启动整个连接器 JVM,这将运行其他不需要重新启动的连接器
    3. 您无法将自己的生产者/消费者代码集成到现有应用程序中,或者只是希望有一个更简单的生产/消费者循环
    4. 最好使用不与特定二进制格式绑定的结构化数据
    5. 您自己编写或使用社区连接器经过了良好的测试,并可针对您的用例进行配置

    与原始生产者/消费者 API 相比,Connect 的容错选项有限,缺点是代码较多,具体取决于所使用的其他库

    注意:Confluent Platform 还是一样的 Apache Kafka

    【讨论】:

    • 感谢@cricket_007 的详细回复。 Kafka连接的分布式模式是否不能确保容错设计?另外,如果我们不使用 Kafka 连接,应该如何运行消费者/生产者以实现容错?
    • 您期望什么样的容错能力?运行多个消费者应用程序的行为与 Connect Distributed 相同,但您只能运行与主题分区一样多的实例
    • 容错意味着不运行单个实例,而是运行来自不同服务器的多个实例。我们为制片人提供了哪些选择?
    • 如前所述,您可以使用运行常规消费者应用程序的多台服务器来做同样的事情。生产者可扩展性取决于您的输入源,但容错仅限于单个实例
    • 嗨@cricket_007,我的来源是一个日志文件。有哪些选项可以加快将数据推送到 Kafka Broker 的过程?
    【解决方案3】:

    Kafka 连接: Kafka Connect 是一个开源平台,基本上包含两种类型:SinkSource。 Kafka Connect 用于获取/放置数据从/到数据库到/从 Kafka。 Kafka 连接有助于将各种其他系统与 Kafka 一起使用。它还有助于跟踪从 DB 到 Kafka 的更改(如答案之一 Changed Data Capture (CDC) 中所述)。系统维护偏移量,以便从该特定偏移量读取/写入数据到 Kafka 或任何其他数据库。

    更多详情可以参考https://docs.confluent.io/current/connect/index.html

    生产者/消费者:
    Producer 和 Consumer 只是一个终端系统,它们使用 Kafka 来生产和消费主题 to/from Kafka。它们用于我们想要将数据广播给消费者组中的各种消费者的地方。这种系统还为消费者群体维护数据的滞后和偏移。

    不,您不需要在运行 Kafka 连接时运行任何生产者/消费者。如果您想检查没有数据丢失,您可以在运行源连接器时运行消费者。在 Sink 连接器的情况下,可以通过运行其特定的选择查询在您的数据库中验证已经生成的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 2018-12-18
      • 1970-01-01
      • 2019-05-09
      • 2015-03-25
      • 2017-11-03
      • 2019-01-15
      相关资源
      最近更新 更多