Kafka 流合并消息

Kafka streams merging message

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

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

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

我想将一条消息分成三部分:post正文、评论和点赞。但是,我希望数据库插入是原子的——所以我想将这些消息分组并合并到消费者内存中。

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

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

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

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

但一般来说,Kafka 是为处理大量小消息而设计的,它不适用于大消息。也许您应该考虑不在一条消息中发送全部信息,而是发送增量更改,仅发送已更新的信息。