问题描述
我在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;
}
关于这两个优点和缺点以及任何已知最佳实践的任何建议吗?谢谢。
解决方法
根据我的经验:
- 消息应包含所有必需的信息。
- 密钥是消息传递系统了解如何处理消息的辅助信息。
因此,在两个选项之间,第一个是更可取的。