我有一个数据有效载荷,对于一条消息来说太大了。考虑一个avro:
record Likes {...}
record Comments {...}
record Post {
Likes likes;
Comments comments;
string body;
}
假设喜欢和评论是大集合,如果将它们与帖子一起传递,则将超过最大邮件大小,我认为这是不正确的,最多可增加10-20 MB。
我想将一则消息分为三部分:帖子正文,评论和喜欢。但是,我希望数据库插入是原子的-所以我想将这些消息分组并合并到使用者内存中。
我可以使用kafka-streams吗? 我可以有没有输出主题的流吗(因为输出消息将再次超过最大大小)。
如果您有任何想法都假设输入相同(一条大消息超出了配置的最大消息大小),请分享
答案 0 :(得分:2)
是的,您可以使用kafka-streams做到这一点,将消息传递合并到数据存储中,并且可以拥有不带输出主题的流。您需要确保三个部分进入相同的分区(进入应用程序的相同实例),因此它们可能具有相同的密钥。
对于每个对象,您还可以使用三个主题,然后将它们加入。 (再次使用相同的键)。
但是,一般而言,Kafka旨在处理许多小消息,并且不适用于大消息。也许您应该考虑发送的不是全部信息,而是增量更改,仅发送已更新的信息。