具有复合值的Kafka消息密钥



我正在开发一个将生成kafka消息的系统。这些消息将被组织成或多或少代表数据库表的主题。这些表中的许多表都有复合键,这方面的设计超出了我的控制。目标是准备这些消息,使它们可以很容易地被常见的接收器连接器使用,而无需大量操作。

我将使用模式注册表和avro格式来获得所有明显的优势。具有完整的";行";在消息值中表示为记录对于追加销售操作来说是可以的,但我也需要支持删除。据我所知,这意味着我的消息需要一把钥匙,这样我就可以拥有";墓碑";消息。还要记住,除非绝对必要,否则我希望避免任何类型的转换。

在一个完美的世界里,消息键将是一个";记录";其中包括强类型键列值,消息值将具有其他列值(均由模式注册表控制(。然而,围绕kafka的许多工具似乎都希望消息键是一个单一的原始值。这让我怀疑是否需要计算一个键值,将多个键列连接到一个字符串值中,并将各个列保留在消息值中。这是对的还是我遗漏了什么?我还有什么其他选择?

我假设您知道消息键和分区分配之间的关系。

根据我的理解,没有什么可以阻止你使用像STRUCT这样的复杂类型作为带有或不带有密钥模式的密钥。请参阅此处的API。如果您使用的是不支持复杂类型作为键的开箱即用连接器,那么您可能需要编写自己的单消息转换(SMT(来将键属性移动到值中。

如果您不想编写代码,您提到的方法-联系列以创建键,并将同一列的值保留在value属性中,在许多情况下都有效。我能看到的唯一缺点是你的信息会比要求的要大。如果您不需要分区分配策略或排序要求,那么消息可以没有密钥或随机密钥。

我想得到一个解决问题的答案:

  1. 我提到的使用串联字符串的策略在技术上是有效的。然而,它肯定不是很优雅
  2. 我使用结构化密钥的最初问题是,我没有使用正确的转换器来反序列化密钥,这导致了其他错误。一旦我使用了avro转换器,我就可以得到我的多部分密钥并有效地使用它
  3. 两者在适当实现时都允许我生成可以表示删除的有效逻辑删除消息

相关内容

  • 没有找到相关文章

最新更新