一个连接器的多个转换器

Multiple converters for one connector

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

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

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

为什么不希望单个连接器从单个主题 T 读取并写入多个外部系统?因为 dual write problem 意味着您可能会写入 X 但无法写入 Y。或者更具体地说,您可能会从 T 读取消息,写入 X 和 Y,但发现对 Y 的请求失败。重试可能很复杂,但很多事情都可能出错,拥有两个独立的连接器更简单。

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