[关闭]
@Alpacadh 2022-09-18T17:18:48.000000Z 字数 1952 阅读 236

Consumer

kafka


1、Kafka 的消费模式

消息队列中消息的消费模型通常有两种:推送模型(push)和拉取模型(pull)。

1.1 推送模型(push)

1.2 拉取模型(pull)

1.3 优缺点

2、Consumer 的两套 API

kafka 给我们提供了两套 Consumer API,分别是 The high-level Consumer API 和 The SimpleConsumer API。(其中 High-level Consumer API 提供了一个从 Kafka 消费数据的高层抽象,而 SimpleConsumer API 则需要开发人员更多地关注细节。)

2.1 The high-level Consumer API

High-level Consumer API 提供了 Consumer Group 的语义,一个消息只能被 Group 内的一个 Consumer 所消费,且 Consumer 消费消息时不关注 offset,最后一个 offset 由 Zookeeper 保存。

同时 High-level consumer API 还支持多线程消费,但需要注意:

1)如果消费线程大于 Partition 数量,则有些线程将收不到消息。

2)如果 Partition 数量大于线程数,则有些线程多收到多个 Partition 的消息。

3)如果一个线程消费多个Partition,则无法保证接收消息的顺序,只能保证 Partition 内部有序。

2.2 The SimpleConsumer API

使用 The SimpleConsumer API,你可以对 Partition 有更多的控制权,如多次消费一个消息,只消费 Partition 中部分消息等。

但是使用此 API 时,Partition、Offset、Broker、Leader 等不再透明,需要业务去处理:

1)必须在应用程序中跟踪 Offset,从而确定下一条应该消费哪条消息。

2)应用程序需要通过程序获知每个 Partition 的 Leader,同时还需要处理 Leader 的变更。

3、Consumer Delivery Guarantee(消息投递保证)

如果将 Consumer 设置为 autocommit,Consumer 一旦读到数据立即自动 commit,但此处只考虑到了读取消息的过程,那 Kafka 确保了 Exactly once。但实际使用中 Consumer 还要对读取到的消息做进一步处理:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注