apache-kafka - kafka producer 中两种不同类型的分区
问题描述
在 Kafka 生产者中,我发送两组不同的数据。我有两个主题分区。第一个有钥匙,第二个没有钥匙。据我所知,密钥用于为数据创建分区。如果 key 不存在,将发送 null 并且分区将通过循环调度发生。
但问题是,如果我在某个特定时间段内交替发送带密钥和不带密钥的数据,会发生什么?
除了使用 key 创建的分区之外的分区是否会发生循环调度,还是会发生在所有两个分区上?
解决方案
Kafka 根据以下规则选择分区
- 如果使用自定义分区器,则分区器将根据自定义分区器逻辑进行选择。
- 如果没有自定义分区器,那么 Kafka 使用 DefaultPartitioner
一个。如果键为空,则在循环中选择分区。
湾。如果键是非空键,那么它使用 Murmur2 散列和模来识别主题的分区。
因此,带有键(空或非空)的消息将使用默认分区器在两个分区上发布,而没有定义自定义分区器。
要在特定分区中实现消息发布,您可以使用以下方法。
发布消息时显式传递分区
/** * 创建一条记录发送到指定的topic和partition */ public ProducerRecord(String topic, Integer partition, K key, V value) { this(topic, partition, null, key, value, null); }
您可以创建自定义分区并实现逻辑来选择分区
https://kafka.apache.org/10/javadoc/org/apache/kafka/clients/producer/Partitioner.html
推荐阅读
- python - 根据值的条件对数据框中的列重新排序
- unit-testing - 未解决的参考:TestCoroutineDispatcher
- python - 我怎样才能优化这个多数票
- configuration - autofac 配置文件启用拦截器
- javascript - 扩展运算符在导入的模块中不起作用。但是在我自己的代码中工作
- html - 需要让两个按钮在中心左右对齐几个像素
- javascript - Alpine JS 切换输入值
- image-processing - 如何量化空间模式之间的相似性
- php - 如何将数据库中的数字值用于变量
- php - 用于捕获 mm:ss.uuu 和 hh:mm:ss.uuu 的 PHP 正则表达式