Kafka流合并消息

时间:2019-04-29 04:04:05

标签: apache-kafka apache-kafka-streams stream-processing

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

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

假设喜欢和评论是大集合,如果将它们与帖子一起传递,则将超过最大邮件大小,我认为这是不正确的,最多可增加10-20 MB。

我想将一则消息分为三部分:帖子正文,评论和喜欢。但是,我希望数据库插入是原子的-所以我想将这些消息分组并合并到使用者内存中。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

但是,一般而言,Kafka旨在处理许多小消息,并且不适用于大消息。也许您应该考虑发送的不是全部信息,而是增量更改,仅发送已更新的信息。