一个连接器的多个转换器

时间:2017-10-12 12:49:48

标签: apache-kafka apache-kafka-connect

Kafka Connector是否可以为单个接收器连接器提供多个转换器?例如,我们有一个用例,我们从格式为A的主题接收数据,但希望将其流式传输到两个位置,一个格式为A,另一个格式为B }。是否可以在单个连接器中执行此操作?

1 个答案:

答案 0 :(得分:2)

对于接收器连接器,Connect框架使用converters反序列化来自Kafka主题的消息 read 。然后,连接器可以自由地以任何格式将这些消息传递给后端接收器系统。

但是,让我们假设您有一个主题T,其中包含以A格式序列化的消息,并且您希望将其传递给多个外部系统X和Y.使用Apache Kafka和Connect执行此操作的惯用方法是一个连接器实例消耗T(使用转换器A进行反序列化消息)并写入系统X,第二个连接器实例消耗T(使用转换器进行A)这些连接器彼此独立,因此系统X中的问题可能导致该连接器阻塞,而另一个连接器可以继续使用并写入Y.在这两种情况下, connector 负责其写入外部系统的方式。 转换器仅在接收器连接器的情况下用于反序列化从Kafka主题读取的消息。

为什么不想从单个主题T读取单个连接器并写入多个外部系统?因为dual write problem表示您可能写入X但无法写入Y.或者更具体地说,您可能从T读取消息,写入X和Y,但发现对Y的请求失败。你可以对重试很复杂,但很多事情都可能出错,而且只有两个独立的连接器就更简单了。

现在,如果系统X和Y是同一Kafka集群中的其他主题,您可能只想使用Apache Kafka的Streams API。 Streams应用程序设置为不断读取Kafka主题,以流方式处理消息以计算新消息,并将这些新消息写入其他主题。但同样,您可能希望有两个独立的流拓扑,每个拓扑都消耗主题T并写入主题X或Y.