卡夫卡连接器中有可能为单个接收器连接器提供多个转换器吗?例如,我们有一个用例,在该用例中,我们以格式A
接收来自主题的数据,但希望将其流到两个位置,一个是格式A
,另一个是格式B
。在一个连接器中可以做到这一点吗?
发布于 2017-10-12 07:04:48
对于接收器连接器,Connect框架使用换流器反序列化从Kafka主题读取的消息。然后连接器可以自由地将这些消息以它想要的格式传递到后端接收器系统。
然而,让我们假设您有一个主题T,它将消息序列化为A格式,并且希望将其传递给多个外部系统,X和Y。使用Apache Kafka和Connect的惯用方法是让一个连接器使用T(使用转换器A来反序列化消息)并写入系统X,而第二个连接器实例使用T(使用转换器A来反序列化消息)并写入系统Y。这些连接器彼此独立,因此,系统X中的一个问题可能导致连接器阻塞,而另一个连接器可以继续使用和写入Y。在这两种情况下,连接器都负责它如何写入外部系统。在接收器连接器的情况下,转换器仅用于反序列化从Kafka主题读取的消息。
为什么你不想要一个连接器从一个单一的主题T中读取并写入多个外部系统?因为对偶写入问题意味着您可以写到X,但是不能写到Y。或者更具体地说,您可能从T读取消息,写到X和Y,但是发现对Y的请求失败了。对于重试,您可能会比较复杂,但是很多事情都可能出错,而拥有两个独立的连接器就更简单了。
现在,如果系统X和Y是同一个Kafka集群中的其他主题,那么您可能只想使用Apache的流API。流应用程序被设置为持续读取Kafka主题,以流方式处理消息以计算新消息,并将这些新消息写入其他主题。但是,您可能希望有两个独立的流拓扑,每个拓扑消耗主题T,并写入主题X或Y。
https://stackoverflow.com/questions/46710063
复制