共计 604 个字符,预计需要花费 2 分钟才能阅读完成。
在构建 ProducerRecord 的时候说过,ProducerRecord 除了 topic 和 value 外,还有两个可选的,包含 partition 和 key。在拉取到元数据后,咱们就开始依据分区来对这条音讯进行发送。
指定分区
指定分区,就是指 构建 ProducerRecord 的时候,topic 为 topic1 的 ProducerRecord 指定 partition 为 1,假设 broker 此时有 3 个,别离为 broker0、broker1、broker2,那这个音讯将会发送给 broker1。
没有 key
如果没有指定分区的时候,就会依据分区器进行分区的计算,咱们这里间接用默认的分区器进行分区,所以又分为指定 key 和没有 key 的状况。
如果没有指定 key 的时候,这里也有两种状况:
- topic1 对应可用的分区数大于 0,那依据 topic1 对应可用的分区数进行轮询。
- topic1 对应可用的分区数等于 0,此时依据 topic1 对应的分区数进行轮询。
轮询的意思就是,这一次发给 broker0,下一次发给 broker1,再下一次发给 broker2,而后再从 broker0 开始。
指定 key
如果指定了 key,那 kafka 就会通过 murmur2 算法,对 key 的值进行进行,比方 key 为 a 的时候,计算的值为 32,这个 32 会对 broker 的数量 3 进行取模,失去的余数为 2,此时就会发送给 broker2。
这里须要留神的是,这个 key 曾经是序列化后的 key。
正文完