为什么消费者在主题创建(编程)和消息发布后才能看到消息?

时间:2016-10-28 00:28:42

标签: apache-kafka

我观察到如果我创建主题并在创建主题后立即发布消息(所有这些都在同一生产者程序中),则消费者程序不会分配分区(即{{1}返回空分区列表)。但是,如果我在消费者订阅主题之前添加一些等待,那么分区分配工作正常,消费者会收到消息。

为什么?

1 个答案:

答案 0 :(得分:0)

发送消息是异步的,这意味着send方法只将记录添加到缓冲区并立即返回。如果您在致电发送后立即开始阅读。要传输的记录可能仍在缓冲区空间中。这就是为什么你必须等待一段时间才能看到生成的消息。对于您的场景,KafkaProducer提供了一个 flush 方法,该方法可立即发送所有缓冲记录(即使linger.ms大于0),并在完成与这些记录关联的请求时阻止。请参阅以下代码:

for(ConsumerRecord<String, String> record: consumer.poll(100))
    producer.send(new ProducerRecord("my-topic", record.key(), record.value());
producer.flush();
consumer.commit();