我需要从Kafka主题获取消息,并通过基于HTTP的API通知其他系统。即从topic获取消息,映射到第三方API并调用。我打算为此编写一个Kafka Sink连接器。
对于这个用例,Kafka Connect是正确的选择,还是我应该使用Kafka客户端。
发布于 2016-12-11 09:07:47
Kafka Connect可以很好地实现这一目的,但这也是一个非常简单的消费者应用程序,因为消费者也有容错/可伸缩性的好处,在这种情况下,您可能只是在每个消费者实例中进行简单的一次消息处理。您还可以轻松地在此应用程序中使用enable.auto.commit
,因此您不会遇到直接使用使用者的棘手部分。与在这种情况下使用消费者相比,使用Kafka Connect的主要好处是可以使连接器对不同的输入格式通用,但对于自定义连接器来说,这可能并不重要。
发布于 2017-01-04 06:54:01
Kafka客户端当您拥有对代码的完全控制,并且您是专业开发人员时,您希望将应用程序连接到Kafka,并可以修改应用程序的代码。
push data into Kafka
pull data from Kafka.
https://cwiki.apache.org/confluence/display/KAFKA/Clients
Kafka Connect当您无法控制Kafka中新增的第三方代码时,您必须将Kafka连接到不能修改代码的数据存储。
Kafka Connect的范围很窄:它只专注于复制来往于Kafka的流数据,而不处理其他任务。
http://docs.confluent.io/2.0.0/connect/
我从其他博客中添加了几行来解释不同之处
想要采用Kafka的公司编写了一堆代码来发布他们的数据流。我们从经验中学到的是,正确地做这件事比看起来要复杂得多。具体地说,每个连接器都必须解决一组问题:
·模式管理:数据管道在可用的地方携带模式信息的能力。如果缺少此功能,您最终将不得不在下游重新创建它。此外,如果同一数据有多个使用者,则每个使用者都必须重新创建该数据。我们将在未来的博客文章中介绍数据管道的模式管理的各种细微差别。
·容错:运行流程的多个实例,并对故障保持弹性
·并行性:水平扩展以处理大规模数据集
·延迟:实时摄取、传输和处理数据,从而摆脱一天一次的数据转储。
·交付语义:在机器发生故障或进程崩溃时提供强有力的保证
·操作和监控:以一致的方式监控每个数据集成流程的运行状况和进度
这些问题本身就很难解决,在每个连接器中单独解决它们是不可行的。相反,您想要一个单一的基础设施平台,连接器可以在其上构建,以一致的方式解决这些问题。
直到最近,采用Kafka进行数据集成还需要大量的开发人员专业知识;开发Kafka连接器需要在客户端API上构建。
发布于 2017-05-22 23:13:11
当您使用kafka connect source来生成特定主题的消息时,您应该使用kafka连接接收器。
例如,当你使用file-source的时候,你应该使用file-sink来使用已经产生的源文件。或者,当您使用jdbc-source时,您应该使用jdbc-sink来使用您生成的内容。
因为生产者和接收器消费者的模式应该是兼容的,所以您应该在两端使用兼容的源和接收器。
如果在某些情况下模式不兼容,您可以使用从kafka 10.2版本开始添加的SMT (简单消息转换)功能,并且您将能够编写消息转换器来在不兼容的生产者和消费者之间传输消息。
注意:如果您想更快地传输消息,我建议您使用avro和模式注册表来更有效地传输消息。
如果你能用java编写代码,你可以使用java kafka stream,Spring-Kafka项目或流处理来实现你想要的。
https://stackoverflow.com/questions/40702860
复制相似问题