【问题标题】:Kafka Topic Partitioner function - configuration questionKafka Topic Partitioner功能-配置问题
【发布时间】:2018-10-26 23:25:11
【问题描述】:

我正在尝试使用 librdkafka(c 代码库)编写一个 Kafka 生产者。我不希望我的应用程序必须通过主题上的分区数手动循环。在 Kafka Producer 的 Java 版本中,这可以通过不指定分区或键来实现。 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 中启用的功能吗?

【问题讨论】:

  • 在librdkafka中发布的定义为: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);跨度>
  • 只是好奇:你想用什么做什么来分区?注意在produce方法中,可以手动分配分区,不需要单独的分区函数
  • 我想要循环,但我不希望发布者必须知道分区数。
  • 自动分区将计算哈希,然后根据分区计数进行修改,因此无论如何它都不会暴露给生产者

标签: apache-kafka


【解决方案1】:

如果您在生产时没有明确指定分区,通过使用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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 2017-02-14
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2018-01-08
    相关资源
    最近更新 更多