卡夫卡流合并消息



我有一个数据有效负载,对于一条消息来说太大了。考虑一个 avro:

record Likes {...}
record Comments {...}
record Post {
  Likes likes;
  Comments comments;
  string body;
}

假设喜欢和评论是大型集合,如果将它们与帖子一起传递,它将超过最大消息大小,我认为将其增加到 10-20 MB 是不正确的。

我想将一条消息分成三条:帖子正文、评论和喜欢。但是,我希望数据库插入是原子的 - 所以我想在消费者内存中对这些消息进行分组和合并。

我可以用卡夫卡流来做吗?我可以有一个没有输出主题的流吗(因为输出消息将再次超过最大大小(。

如果您有任何想法,假设相同的输入(一条大消息超过配置的最大消息大小(,请分享

是的,您可以使用 kafka-streams 来执行此操作,合并数据存储中的消息传递,并且可以拥有一个没有输出主题的流。您需要确保三个部分转到同一分区(以转到应用程序的同一实例(,因此它们可能具有相同的键。

您还可以为每个对象使用三个主题,然后加入它们。(再次使用相同的密钥(。

但通常 Kafka 被设计为处理大量小消息,它不适用于大消息。也许您应该考虑发送的不是一条消息中的所有信息,而是增量更改,仅发送已更新的信息。

相关内容

  • 没有找到相关文章

最新更新