发到 Kafka 里的消息除了可以设置消息的值以外,还可以设置一下这个消息的名字,也就是消息的 Key。这样同样名字的消息会被放到同一个分区里。
在终端,我们重新创建一个 Producer,用的还是这个 kafka-console-producer 命令, topic 是 demo,这里再添加一个 --property 选项,把 parse.key 设置成 true,然后再添加一个 --property 设置一下 key.separator 这个属性,可以设置成冒号。这样发布的消息可以使用冒号分隔开消息的 key 还有消息的 value 。
先设置一下消息的 key,比如 user_1,冒号,后面是这条消息的值,干啥呢? 回到控制中心观察一下,你会看到这条新的消息,它的 key 就会是 user_1,value 是这条消息的值。注意观察一下这条消息所属的分区,编号是 1。
回到终端,下面再发布一条消息,消息的 key 仍然是 user_1 ,冒号的右边是这条消息的值,哈两杯不? 回到控制台心观察一下这条消息,消息的 key 仍然是 user_1,注意这条消息所属的分区编号也是 1。
因为这两个消息的 key 是一样的,所以消息会放在同一个分区里。
在终端,再发布两条消息,这两条消息的 key 都可以设置成 user_2 ,然后设置一下消息的值。
回到控制中心,观察一下新发布的这两条消息,你会发现,它们的 key 都是 user_2, 这两条消息都在编号是 0 的这个分区里。