Kafka流合并消息

问题描述 投票:0回答:1

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

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

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

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

我可以用kafka-streams做吗?我可以拥有没有输出主题的流(因为输出消息将再次超过最大大小)。

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

apache-kafka apache-kafka-streams stream-processing
1个回答
2
投票

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

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

但一般来说,Kafka旨在处理大量的小消息,并且它对大型消息不起作用。可能是您应该考虑在一条消息中发送不是全部信息,而是增量更改,仅更新已更新的信息。

© www.soinside.com 2019 - 2024. All rights reserved.