【问题标题】:Consume and produce message in particular Kafka partition?在特定的 Kafka 分区中消费和生产消息?
【发布时间】:2016-12-02 16:32:04
【问题描述】:

用于读取主题中的所有分区:

~bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic myTopic --from-beginning

  1. 如何使用主题的特定分区? (例如分区键为 13)
  2. 以及如何在具有特定分区键的分区中生成消息?有可能吗?

【问题讨论】:

    标签: apache-kafka apache-zookeeper kafka-consumer-api kafka-producer-api


    【解决方案1】:

    如何使用主题的特定分区? (例如 使用分区键 13)

    kafka-console-consumer中有一个名为--partition的标志

    --partition <Integer: partition>         The partition to consume from.         
                                               Consumption starts from the end of   
                                               the partition unless '--offset' is   
                                               specified.                           
    

    命令如下:

    bin/kafka-console-consumer --bootstrap-server localhost:9092 --topic test --partition 0 --from-beginning
    

    【讨论】:

      【解决方案2】:

      控制台生产者和消费者不提供这种灵活性。您可以通过 Kafka API 实现这一点。

      1. 您可以使用assign() 操作KafkaConsumer/Assign 手动将分区分配给消费者。这将禁用组重新平衡。请谨慎使用。

      2. 您可以在 KafkaProducer 消息中指定分区详细信息。如果未指定,则按照分区策略存储。

      【讨论】:

        【解决方案3】:

        使用许多可用的客户端,您可以像 serejja 所说的那样指定分区号。

        还可以查看https://github.com/cakesolutions/scala-kafka-client,它使用演员并为手动分区和偏移提供多种模式。

        如果你想在终端上做同样的事情,我建议使用 kafkacat。 (https://github.com/edenhill/kafkacat) 我在开发过程中的个人选择。

        你可以做这样的事情

        kafkacat -b localhost:9092 -f 'Topic %t[%p], offset::: %o, data: %s key: %k\n' -t testtopic

        而对于特定的分区,你只需要使用-p 标志。

        【讨论】:

          【解决方案4】:

          您不能使用控制台消费者和生产者。但是您可以使用更高级别的客户端(使用适合您的任何语言)。

          1. 您可以使用例如assign 方法手动分配要使用的特定主题分区(https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java#L906
          2. 您可以使用自定义 Partitioner 来覆盖分区逻辑,您将在其中手动决定如何分区您的消息 (https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java#L206-L208)

          【讨论】:

            猜你喜欢
            • 2023-01-21
            • 2020-08-24
            • 1970-01-01
            • 2018-02-05
            • 1970-01-01
            • 2018-12-03
            • 1970-01-01
            • 2017-08-27
            • 2015-09-18
            相关资源
            最近更新 更多