消息预处理(主题 - 主题) - Kafka Connect API与Streams vs Kafka Consumer?

时间:2018-04-19 19:30:57

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

我们需要对每个消息进行一些预处理(使用不同的密钥进行解密/重新加密),从一个主题到另一个主题。

我一直在研究使用Kafka Connect,因为它提供了很多开箱即用的好东西(配置管理,偏移存储,错误处理等)。

但是我觉得我最终只是在实现SourceConnectorSinkConnector来实现两个主题之间的数据移动而这些接口都不是Topic A -> (Connector) -> Topic B。这是正确的方法吗?我应该单独使用SinkConnector并让我的SourceTask.put()做所有写入Kafka的逻辑吗?

其他选项是KafkaConsumer/Producer和/或Streams,但这些选项需要自己的实例来运行逻辑,而不是偏移重试错误处理。

1 个答案:

答案 0 :(得分:2)

  

提供了很多开箱即用的好东西(配置管理,偏移存储,错误处理等)。

配置管理不应该比重新部署应用程序更难,但这取决于您可能拥有或可能没有的任何版本控制或CI / CD管道。

Kafka Producer / Consumer和Streams提供偏移管理,您只需将其配置为执行除默认设置之外的任何操作。

错误处理相当充分,如果您关心检测错误,请不要忘记。连接本身将在严重错误条件下停止消耗和生成,而不是重试或跳过消息。

  

这些接口都不是为了Topic A -> (Connector) -> Topic B

你见过Confluent Replicator(授权产品)吗? 两个主题之间的Kafka Connect。

否则,你见过MirrorMaker吗?这是一个生产者 - 消费者对,通常用于在各个群集之间复制数据,但可以使用相同的源和目标设置。您只需要确保不创建反馈循环。您需要在其上应用“自定义逻辑”(并更改主题名称),其内容为called a Handler class that is placed on your Kafka classpath

bin/kafka-mirror-maker.sh

...

--message.handler <String: A custom      Message handler which will process
  message handler of type                  every record in-between consumer and
  MirrorMakerMessageHandler>               producer.
--message.handler.args <String:          Arguments used by custom message
  Arguments passed to message handler      handler for mirror maker.
  constructor.>

Confluent MirrorMaker documentation
Kafka MirrorMaker documentation

没有什么可以阻止您实现Connect API,它可能比没有外部集群管理器的Kafka Streams应用程序更容易管理。另外,由于Connect是一个Java库,理论上你可以在其内部使用Streams库。