Avro 是否应该同时用于 Kafka 的键和值?
Should Avro be used to on both the key and value in Kafka?
我们正在努力设置 Kafka 集群并探索 Avro 的使用,但我无法找到关于 Avro 是否应该 用于两个密钥的指导和 Kafka 消息的价值。我已经探索了这两个用例,但我并没有真正看到在关键级别应用 AVRO 的好处。这样做有什么好的理由吗?如果不在密钥上使用 AVRO,后续行动是什么是首选转换器(字符串、JSON 等)?
If Avro should be used on both the key and value of a Kafka message
这取决于您将如何使用密钥。键通常是 (不总是)单个字段,可能是字符串或数字,但不是复杂的对象。既然如此,就没有理由为他们使用Avro格式。
I've explored both use cases and I'm not really seeing the benefit of
applying AVRO at the key level
您可以通过考虑将要放入的内容作为密钥来评估使用情况。如果值是您最关心的,并且一个简单的字符串或数字就足以区分(或)分类您的 Kafka 消息,则不需要 Avro 格式。
有时,可能会有多个字段组成一个键的用例,就像我们创建一个 primary key in RDBMS out of multiple columns 一样。如果您假设您的应用程序有(或可能有)这样的用例,那么使用 avro 以支持模式演化。
And a follow-up if not using AVRO on the key what is the preferred
converter (String, JSON, etc)
JSON 和 Avro 用于复杂对象,如自定义 POJO,而其他如 String、Long 等用于单个字段值。
如果我想流式传输可以由 user_id 识别的用户信息,那么 user_id
将是我的 Kafka 消息密钥。在这种情况下,我们可以使用 String
或 Long
.
Avro 具有紧凑的二进制格式。有关为什么将 Avro 用于 Kafka see this article.
的更多信息
我们正在努力设置 Kafka 集群并探索 Avro 的使用,但我无法找到关于 Avro 是否应该 用于两个密钥的指导和 Kafka 消息的价值。我已经探索了这两个用例,但我并没有真正看到在关键级别应用 AVRO 的好处。这样做有什么好的理由吗?如果不在密钥上使用 AVRO,后续行动是什么是首选转换器(字符串、JSON 等)?
If Avro should be used on both the key and value of a Kafka message
这取决于您将如何使用密钥。键通常是 (不总是)单个字段,可能是字符串或数字,但不是复杂的对象。既然如此,就没有理由为他们使用Avro格式。
I've explored both use cases and I'm not really seeing the benefit of applying AVRO at the key level
您可以通过考虑将要放入的内容作为密钥来评估使用情况。如果值是您最关心的,并且一个简单的字符串或数字就足以区分(或)分类您的 Kafka 消息,则不需要 Avro 格式。
有时,可能会有多个字段组成一个键的用例,就像我们创建一个 primary key in RDBMS out of multiple columns 一样。如果您假设您的应用程序有(或可能有)这样的用例,那么使用 avro 以支持模式演化。
And a follow-up if not using AVRO on the key what is the preferred converter (String, JSON, etc)
JSON 和 Avro 用于复杂对象,如自定义 POJO,而其他如 String、Long 等用于单个字段值。
如果我想流式传输可以由 user_id 识别的用户信息,那么 user_id
将是我的 Kafka 消息密钥。在这种情况下,我们可以使用 String
或 Long
.
Avro 具有紧凑的二进制格式。有关为什么将 Avro 用于 Kafka see this article.
的更多信息