我们需要对每个消息进行一些预处理(使用不同的密钥进行解密/重新加密),从一个主题到另一个主题。
我一直在研究使用Kafka Connect,因为它提供了很多开箱即用的好东西(配置管理,偏移存储,错误处理等)。
但是我觉得我最终只是在实现SourceConnector
和SinkConnector
来实现两个主题之间的数据移动而这些接口都不是Topic A -> (Connector) -> Topic B
。这是正确的方法吗?我应该单独使用SinkConnector
并让我的SourceTask.put()
做所有写入Kafka的逻辑吗?
其他选项是KafkaConsumer/Producer
和/或Streams,但这些选项需要自己的实例来运行逻辑,而不是偏移重试错误处理。
答案 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库。