我需要从Kafka主题获取消息,并通过基于HTTP的API通知其他系统。也就是说,从主题获取消息,映射到第三方API并调用它们。我打算为此写一个Kafka Sink连接器。
对于这个用例,Kafka Connect是正确的选择,或者我应该选择Kafka Client。
答案 0 :(得分:1)
Kafka Connect可以很好地用于此目的,但这也是一个非常简单的消费者应用程序,因为消费者也具有容错/可扩展性的好处,在这种情况下,您可能只是在做简单的消息 - 在 - 每个消费者实例中的一次性处理。您也可以轻松地将enable.auto.commit
用于此应用程序,这样您就不会遇到直接使用消费者的棘手部分。与在这种情况下使用消费者相比,使用Kafka Connect的主要原因是连接器可以针对不同的输入格式制作通用,但对于自定义连接器而言,这可能并不重要。
答案 1 :(得分: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连接器。
答案 2 :(得分:0)
当您使用kafka connect source生成针对特定主题的消息时,您应该使用kafka connect sink。
例如当您使用文件源时,您应该使用文件接收器来消耗已生成的源。或者当您使用jdbc-source时,您应该使用jdbc-sink来消耗您生成的内容。
因为生产者和接收器使用者的模式应该是兼容的,所以你应该在两侧使用兼容的源和接收器。
如果在某些情况下模式不兼容,您可以使用从kafka版本10.2开始添加的SMT(简单消息转换)功能,并且您将能够编写消息转换器以在不兼容的生产者和消费者之间传输消息。 / p>
注意:如果您想更快地传输邮件,我建议您使用avro和schema注册表来更有效地传输邮件。
如果你可以使用java编码,你可以使用java kafka流,Spring-Kafka项目或流处理来实现你想要的。
答案 3 :(得分:0)
在名为Kafka In Action
的书中,其解释如下:
Kafka Connect 的目的是帮助将数据移入或移出Kafka ,而无需编写我们自己的生产者和客户。 Connect是一个框架,已经是Kafka的一部分,确实可以简化使用已经构建的片段来开始您的流媒体之旅的过程。
As for your problem
,首先,一个应该问的最简单的问题是是否可以修改需要数据交互的系统的应用程序代码。
第二,如果您要编写具有深入知识的自定义连接器,并且该连接器将被其他人使用,那是值得的。因为它可能会帮助那些可能不是这些系统专家的人。否则,此kafka连接器只能由您自己使用,我认为您应该编写Kafka连接器。因此,您可以获得更大的灵活性,并可以更轻松地编写实现。