首页 文章

Kafka connect或Kafka Client

提问于
浏览
1

我需要从Kafka主题获取消息,并通过基于HTTP的API通知其他系统 . 也就是说,从主题获取消息,映射到第三方API并调用它们 . 我打算为此编写一个Kafka接收器连接器 .

对于这个用例,Kafka Connect是正确的选择,或者我应该使用Kafka Client .

3 回答

  • 0

    Kafka Connect可以很好地用于此目的,但这也是一个非常简单的消费者应用程序,因为消费者也具有容错/可扩展性的好处,在这种情况下,您可能只是在做一次简单的消息处理每个消费者实例 . 您也可以轻松地将 enable.auto.commit 用于此应用程序,因此您不会遇到直接使用消费者的棘手部分 . 与在这种情况下使用消费者相比,使用Kafka Connect的主要原因是连接器可以针对不同的输入格式制作通用,但对于自定义连接器而言,这可能并不重要 .

  • 1

    Kafka客户端当您完全控制代码并且您是专家开发人员时,您希望将应用程序连接到Kafka并且可以修改应用程序的代码 .

    push data into Kafka
    
    pull data from Kafka.
    

    https://cwiki.apache.org/confluence/display/KAFKA/Clients


    当您无法控制Kafka中的第三方新代码并且必须将Kafka连接到无法修改代码的数据存储时,Kafka Connect .

    Kafka Connect的范围很窄:它只关注从Kafka复制流数据并且不处理其他任务 .

    http://docs.confluent.io/2.0.0/connect/


    我在其他博客中添加了几行来解释差异

    想要采用Kafka的公司会编写一堆代码来发布他们的数据流 . 我们从经验中学到的是,正确地做这件事比看上去要多得多 . 特别是,每个连接器都必须解决一系列问题:

    •模式管理:数据管道在可用的情况下携带模式信息的能力 . 如果没有此功能,您最终必须在下游重新创建它 . 此外,如果同一数据有多个消费者,则每个消费者都必须重新创建它 . 我们将在未来的博客文章中介绍数据管道模式管理的各种细微差别 .

    •容错:运行多个进程实例,并对故障具有弹性

    •并行性:水平缩放以处理大规模数据集

    •延迟:实时摄取,传输和处理数据,从而摆脱一天一次的数据转储 .

    •交付语义:在机器发生故障或处理崩溃时提供强有力的保证

    •操作和监控:以一致的方式监控每个数据集成过程的运行状况和进度

    这些本身就是难题,在每个连接器中单独解决它们是不可行的 . 相反,您希望构建的单个基础架构平台能够以一致的方式解决这些问题 .

    直到最近,采用Kafka进行数据集成需要大量的开发人员专业知识;开发需要在客户端API上构建的Kafka连接器 .

    https://www.confluent.io/blog/announcing-kafka-connect-building-large-scale-low-latency-data-pipelines/

  • 1

    当您使用kafka connect source生成到特定主题的消息时,您应该使用kafka connect sink .

    例如当您使用文件源时,您应该使用文件接收器来消耗已生成的源 . 或者当您使用jdbc-source时,您应该使用jdbc-sink来消耗您生成的内容 .

    因为 生产环境 者和接收器消费者的模式应该是兼容的,所以你应该在两侧使用兼容的源和接收器 .

    如果在某些情况下模式不兼容,您可以使用自kafka版本10.2之后添加的SMT(简单消息转换)功能,您将能够编写消息转换器以在不兼容的 生产环境 者和使用者之间传输消息 .

    注意:如果您想更快地传输邮件,我建议您使用avro和schema注册表来更有效地传输邮件 .

    如果你可以用java编码,你可以使用java kafka流,Spring-Kafka项目或流处理来实现你想要的 .

相关问题