我知道在 Kafka 中,消费者从代理主题中提取消息(拉取)?
receive
考虑到方法阻塞,我觉得 Pulsar 的工作方式相同。但我找不到确认。有人可以指点我参考或纠正我吗?
谢谢
Pulsar 的文档清楚地解释了消息消费的工作原理:
Pulsar Consumer 源从 Apache Pulsar 集群中的一个或多个主题读取消息。
Pulsar Consumer 源订阅 Pulsar 主题,处理传入的消息,然后在读取消息时将确认发送回 Pulsar。
可以同步(sync)或异步(async)从代理接收消息。
receive
方法同步接收消息。消费者进程将被阻塞,直到有消息可用。例如,
Message msg = consumer.receive();
一旦有新消息可用,异步接收将立即返回一个完成的类型值。CompletableFuture
例如,
CompletableFuture<Message> asyncMessage = consumer.receiveAsync();
在 Pulsar文档中:
消费者端有一个队列,用于接收从代理推送的消息。您可以使用 receiverQueueSize 参数配置队列大小。默认大小为 1000)。每次调用 consumer.receive() 时,都会从缓冲区中取出一条消息。
因此代理将消息推送到消费者端的队列。当receive
调用该方法时,一条消息将被出列并返回。
当队列的一半被消耗时,Pulsar 消费者会定期向 Pulsar 代理发送许可请求以请求更多消息。这在此处进行了描述。
简而言之,如此处所述
Pulsar 还使用基于推送的方法,但使用模拟消费者拉动的 API。