Kafka 概述
- Kafka 介绍:Kafka 是一款基于发布与订阅模式的消息系统,被全球财富前100强公司中的80%以上使用。
- GitHub 统计:拥有27.6k的star数和13.6k的fork数。
Kafka 组成模块
- 消息生产者:负责创建消息并发送到特定的主题。
- 消息消费者:作为消息的读取者和消费者,可以订阅多个主题。
- Broker:Kafka服务器,接收生产者的消息并进行持久化保存。
- 主题(Topic):消息的分类标识,生产者和消费者通过主题进行消息的发送和接收。
- 分区(Partition):提高Kafka处理消息的吞吐量,一个主题下的消息可以分布在多个分区中。
Kafka 设计理念
- Kafka 不是直接将消息从生产者发送给消费者,而是通过中间的Broker进行消息的分类和存储。
Kafka 功能特性
- 高吞吐量:设计用于处理大量业务消息,单台Broker可以处理每秒百万级的消息。
- 高可用性:通过Broker集群实现。
- 可扩展性:通过增加Broker节点来扩展系统。
Kafka 代码示例
- 消息生产者示例:使用
KafkaTemplate
发送消息到指定主题。 - 消息消费者示例:使用
@KafkaListener
注解监听特定主题的消息。
分区的作用
- 提高吞吐量:通过分区实现消息的负载均衡,提高系统处理能力。
- 消息顺序性:同一个分区下的消息可以保证顺序消费,但不同分区间无法保证。
异步回调
- 定义:在异步发送消息时,可以指定一个回调函数,用于处理Broker服务器的响应。
- 用途:通常用于异常日志记录。
消费者消息提交
- 自动提交:默认情况下,消费者客户端每5秒自动提交最大偏移量。
- 手动提交:需要消费者在消费消息后手动提交偏移量,可以是同步或异步。
提交方式的优缺点
- 自动提交:
- 优点:方便,无需额外配置。
- 缺点:可能导致消息丢失或重复消费。
- 手动提交:
- 优点:提供更细粒度的控制,减少消息丢失风险。
- 缺点:可能影响应用程序的吞吐量,需要额外的日志记录。