Kafka用密钥发送消息手动决定分区与否

5kgi1eie  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(402)

例如,我有一个员工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);

这样会从消息中忽略密钥吗?

tv6aics1

tv6aics11#

你可以这样做,但也有局限性:
你不能压缩这个主题
某些流操作需要密钥(如连接)
使用者将需要对整个消息进行反序列化以获取密钥,因此不能使用密钥进行有效的路由或跳过。
只要你知道取舍,你认为信息的大小真的很重要。。。去吧,把钥匙忘了。

相关问题