这一部分主要是从客户端使用的角度来理解 Kakfa 的重要机制。重点依然是要建立自己脑海中的 Kafka 消费模型。Kafka 的 HighLevel API 使用是非常简单的,所以梳理模型时也要尽量简单化,主线清晰,细节慢慢扩展。
一、从基础的客户端说起
Kafka 提供了非常简单的客户端 API 。只需要引入一个 Maven 依赖即可:
1 、消息发送者主流程
然后可以使用 Kafka 提供的 Producer 类,快速发送消息。
整体来说,构建 Producer 分为三个步骤:
- 设置 Producer 核心属性 : Producer 可选的属性都可以由 ProducerConfig 类管理。比如
ProducerConfig.BOOTSTRAP_SERVERS_CONFIG 属性,显然就是指发送者要将消息发到哪个 Kafka 集群上。这是每个Producer 必选的属性。在 ProducerConfig 中,对于大部分比较重要的属性,都配置了对应的DOC 属性进行描述。 - 构建消息 : Kafka 的消息是一个 Key-Value 结构的消息。其中, key 和 value 都可以是任意对象类型。其中,key 主要是用来进行 Partition 分区的,业务上更关心的是 value 。
- 使用 Producer 发送消息。 :通常用到的就是单向发送、同步发送和异步发送者三种发送方式。
2 、消息消费者主流程
接下来可以使用 Kafka 提供的 Consumer 类,快速消费消息。
整体来说, Consumer 同样是分为三个步骤: - 设置 Consumer 核心属性 :可选的属性都可以由 ConsumerConfig 类管理。在这个类中,同样对于大部分比较重要的属性,都配置了对应的DOC 属性进行描述。同样 BOOTSTRAP_SERVERS_CONFIG 是必须设置的属性。
- 拉取消息 : Kafka 采用 Consumer 主动拉取消息的 Pull 模式。 consumer 主动从 Broker 上拉取一批感兴趣的消息。
- 处理消息,提交位点 :消费者将消息拉取完成后,就可以交由业务自行处理对应的这一批消息了。只是消费者需要向Broker 提交偏移量 offset 。如果不提交 Offset , Broker 会认为消费者端消息处理失败了,还会重复进行推送。
Kafka 的客户端基本就是固定的按照这三个大的步骤运行。在具体使用过程中,最大的变数基本上就是给生产者和消费者的设定合适的属性。这些属性极大的影响了客户端程序的执行方式。