【问题标题】:Kafka producer not picking new partitionsKafka 生产者没有选择新的分区
【发布时间】:2017-10-18 19:41:55
【问题描述】:

我是 Kafka 的新手,正在尝试在其上构建一个服务消息传递平台的服务。这是我的设置:

Kafka 0.9.0.1
动物园管理员 3.4.8
kafka-python1.3.3

我的应用程序创建了一个KafkaProducer,我从中将消息流发送到具有 6 个分区的单个主题。我还创建了 7 个 KafkaConsumers(在单个 group_id 下,其中 6 个分配给 6 个分区,一个处于空闲状态(这是预期的)。当生产者流式传输时,我增加了分区数到7,期望流不会分布在7个分区上并唤醒空闲的消费者.但是,生产者似乎不会拿起新添加的分区,直到我通过重新启动应用程序重新初始化它. 我通过运行这个来扩展分区计数:

kafka-topics --alter --zookeeper localhost:2181 --topic test --partitions 7

生产者有没有办法在不重新初始化的情况下获取分区计数的变化?

这里是相关代码sn-ps:

制片人

class Producer(threading.Thread):
daemon = True

def __init__(self, name, manager):
    super(Producer, self).__init__()
    self.producer = KafkaProducer(bootstrap_servers='localhost:9092')

def run(self):
    while not self.killed:
        if not self.q.empty():
            self._busy()
            self.producer.send('test', value=self.q.get())
        else:
            self._free()

消费者

class Consumer(threading.Thread):
    daemon = True

    def __init__(self, name, manager):
        super(Consumer, self).__init__()
        self.consumer = KafkaConsumer(bootstrap_servers='localhost:9092',
                                 group_id='test_group',
                                 client_id="Consumer " + self.name)
        self.consumer.subscribe(['test'])

    def run(self):
        while not self.killed:
            messages = self.consumer.poll()

            for topic, records in messages.iteritems():
                print self.consumer.config['client_id'] + ": " + str(records)

【问题讨论】:

  • 您能分享一下您是如何为producer 分配分区的吗?同样,当producer 中的分区增加时,consumer 中也需要进行相应的更改。

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


【解决方案1】:

我遇到了一个可能类似的问题并且能够找到解决方案。我在这里写的: How does librdkafka producer learn about new topic partitions in Kafka

如果您的测试太短,这可能是生产者没有了解新分区的原因。参数 topic.metadata.refresh.interval.ms 默认为 300000(以毫秒为单位),因此 broker 将每 5 分钟刷新一次生产者中的元数据。如果您的测试在添加分区后花费了超过 5 分钟,那么这不是原因。

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 2019-02-03
    • 2017-04-28
    • 2023-03-26
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    相关资源
    最近更新 更多