我正在尝试使用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中启用此功能吗?
答案 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_cb
或rd_kafka_topic_conf_set_partitioner_cb()