Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 当没有指定分区键时,为什么数据不能均匀地分布在分区之间?_Apache Kafka - Fatal编程技术网

Apache kafka 当没有指定分区键时,为什么数据不能均匀地分布在分区之间?

Apache kafka 当没有指定分区键时,为什么数据不能均匀地分布在分区之间?,apache-kafka,Apache Kafka,这一解释在卡夫卡10中仍然有效吗 在Kafka producer中,可以指定一个分区键来指示消息的目标分区。默认情况下,基于散列的分区器用于确定给定密钥的分区id,用户也可以使用自定义分区器。 为了减少开放套接字的#,在0.8.0()中,当分区键未指定或为空时,生产者将选择一个随机分区,并在切换到另一个分区之前坚持一段时间(默认值为10分钟)。因此,如果生产者少于分区,在给定的时间点,某些分区可能不会接收任何数据。为了缓解这个问题,可以缩短元数据刷新间隔,或者指定消息键和自定义的随机分区器。有关

这一解释在卡夫卡10中仍然有效吗

在Kafka producer中,可以指定一个分区键来指示消息的目标分区。默认情况下,基于散列的分区器用于确定给定密钥的分区id,用户也可以使用自定义分区器。 为了减少开放套接字的#,在0.8.0()中,当分区键未指定或为空时,生产者将选择一个随机分区,并在切换到另一个分区之前坚持一段时间(默认值为10分钟)。因此,如果生产者少于分区,在给定的时间点,某些分区可能不会接收任何数据。为了缓解这个问题,可以缩短元数据刷新间隔,或者指定消息键和自定义的随机分区器。有关更多详细信息,请参见此线程


从这里开始?

新制作人已改为使用循环策略。也就是说,如果没有指定密钥,消息将均匀地传递到所有分区。

给定空密钥,我认为旧的生产者也使用循环策略。它在一个分区中生成10分钟,然后切换到另一个分区。所以,在某个点上,如果生产者的线程数是,比如说,1,那么数据就不是均匀分布的。新的实现使记录均匀地分布在所有分区上?如果没有提供密钥,并且缓存不包含主题的分区信息,则旧的生产者会随机选择一个分区,因此它不太可能以循环方式运行。请参阅kafka.producer.async.DefaultEventHandler.getPartition方法