例如,我有一个员工pojo:
public class Employee {
private int id;
private String name;
}
我想把这个发给一个有多个分区的Kafka主题。所以我可以用 id
字段作为选择正确分区的键。我可以创造一个 ProducerRecord
如下所示:
ProducerRecord<Integer, Employee> record = new ProducerRecord<>("topic", employee.getId(), employee);
这将向kafka发送一条消息,其中key作为头字段,而 employee
作为有效载荷。
我的问题是,如果密钥已经包含在有效负载中,并且它是有效负载本身的很大一部分,那么手动计算分区号并这样发送会更好吗?
所以它看起来像这样:
int partition = defualtPartitioner.partition(...);
ProducerRecord<Integer, Employee> record = new ProducerRecord<>("topic", partition, null, employee);
这样会从消息中忽略密钥吗?
1条答案
按热度按时间tv6aics11#
你可以这样做,但也有局限性:
你不能压缩这个主题
某些流操作需要密钥(如连接)
使用者将需要对整个消息进行反序列化以获取密钥,因此不能使用密钥进行有效的路由或跳过。
只要你知道取舍,你认为信息的大小真的很重要。。。去吧,把钥匙忘了。