我们正在建立一个kafka集群并探索avro的使用,但是我还没有找到avro是否应该同时用于kafka消息的键和值的指导。我已经研究了这两个用例,但我并没有真正看到在关键级别应用avro的好处。有什么好的理由这么做吗?而后续如果不使用avro上的键,首选的转换器是什么(字符串、json等)?
j0pj023g1#
如果avro应该同时用于kafka消息的键和值那就看你怎么用钥匙了。键通常(不总是)是单个字段,可能是字符串或数字,但不是复杂的对象。在这种情况下,没有理由对它们使用avro格式。我已经研究了这两个用例,但我并没有真正看到在关键级别应用avro的好处您可以通过考虑将要输入的内容作为密钥来评估使用情况。如果您最关心的是值,并且一个简单的字符串或数字就足以区分(或)分类您的kafka消息,那么您不需要avro格式。有时,可能有多个字段组成一个键的用例,就像我们在rdbms中用多列创建主键一样。如果您假设您的应用程序有(或可能有)这样的用例,那么使用avro来支持模式演化。如果不使用avro,那么后续的关键是什么是首选的转换器(字符串、json等)json和avro用于复杂的对象,比如定制的pojo,而string、long等用于单字段值。如果我想流式传输一个可以由用户id标识的用户信息,那么 user_id 将是我的Kafka信息钥匙。在这种情况下,我们可以使用 String 或者 Long .avro有一个紧凑的二进制格式。关于为什么要为Kafka使用avro的更多信息,请参阅本文。
user_id
String
Long
1条答案
按热度按时间j0pj023g1#
如果avro应该同时用于kafka消息的键和值
那就看你怎么用钥匙了。键通常(不总是)是单个字段,可能是字符串或数字,但不是复杂的对象。在这种情况下,没有理由对它们使用avro格式。
我已经研究了这两个用例,但我并没有真正看到在关键级别应用avro的好处
您可以通过考虑将要输入的内容作为密钥来评估使用情况。如果您最关心的是值,并且一个简单的字符串或数字就足以区分(或)分类您的kafka消息,那么您不需要avro格式。
有时,可能有多个字段组成一个键的用例,就像我们在rdbms中用多列创建主键一样。如果您假设您的应用程序有(或可能有)这样的用例,那么使用avro来支持模式演化。
如果不使用avro,那么后续的关键是什么是首选的转换器(字符串、json等)
json和avro用于复杂的对象,比如定制的pojo,而string、long等用于单字段值。
如果我想流式传输一个可以由用户id标识的用户信息,那么
user_id
将是我的Kafka信息钥匙。在这种情况下,我们可以使用String
或者Long
.avro有一个紧凑的二进制格式。关于为什么要为Kafka使用avro的更多信息,请参阅本文。