创建用于Kafka使用的ProtoBuf对象架构

问题描述

我在Kafka上使用ProtoBuf。我们正在创建许多ProtoBuf消息,但是我们只能使用这两个选项。想知道什么是最好的方法吗?希望问题不会被降级,因为它基于某种观点!

说,我想在Kafka上发送Employee消息。我想使用“ id”作为kafka键,并使用值作为“ Employee”消息,如下所示。

选项-1包含“ id”。在此选项中,整个对象作为域对象放在一个地方。

message Employee {
 string id;
 string name;
 string title;
}

选项-2不包含id-因为它尝试使用Kafka密钥(我们使用id填充),并让消费者在他们从Kafka取出消息时将它们拼凑在一起?

message Employee {
 string name;
 string title;
}

关于这两个优点和缺点以及任何已知最佳实践的任何建议吗?谢谢。

解决方法

根据我的经验:

  • 消息应包含所有必需的信息。
  • 密钥是消息传递系统了解如何处理消息的辅助信息。

因此,在两个选项之间,第一个是更可取的。