Kafka Topic Partitioner功能-配置问题

时间:2018-10-26 12:14:36

标签: apache-kafka

我正在尝试使用librdkafka(C代码库)编写Kafka生产者。我不希望我的应用程序必须手动遍历主题上的分区数。在Java版本的Kafka Producer中,可以通过不指定分区或键来实现。 librdkafka中的文档规定以下内容:

 * \p partition is the target partition, either:
 *   - RD_KAFKA_PARTITION_UA (unassigned) for
 *     automatic partitioning using the topic's partitioner function, or
 *   - a fixed partition (0..N)
RD_EXPORT
int rd_kafka_produce(rd_kafka_topic_t *rkt, int32_t partition,
              int msgflags,
              void *payload, size_t len,
              const void *key, size_t keylen,
              void *msg_opaque);

那么主题的分区器功能是什么?我在任何地方都找不到此文档。默认情况下是循环吗?我需要在Zookeeper中启用此功能吗?

1 个答案:

答案 0 :(得分:0)

如果在生产时未明确指定分区,则使用RD_KAFKA_PARTITION_UA,librdkafka将使用分区程序自动确定分区。该策略由名为partitioner的设置定义,默认设置为consistent_random并使用

  

密钥的CRC32哈希值(空和NULL密钥是随机分区的)

有关详细信息,请参见https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md。还要注意,如果您想要与Java完全相同的行为,则需要将partitioner设置为murmur2_random

最后,您还可以编写自己的分区逻辑。在这种情况下,您需要设置partitioner_cbrd_kafka_topic_conf_set_partitioner_cb()