简介
Apache Kafka® 是一个分布式流处理平台,是一种消息中间件。
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。
核心概念:
- Kafka作为一个集群,运行在一台或者多台服务器上。
- Kafka通过topic对存储的流数据进行分类。
- Kafka中每条记录中都包含Key、Value和Timestamp。
核心名词:
- Producer:消息生产者。
- Consumer:消息消费者。
- Topic:消息所属主题,用于区分消息。
- Broker:缓存代理,一个Kafka集群中的服务器称为Broker。
核心API:
- The Producer API 允许应用发布流数据到一个或者多个topic。
- The Consumer API 允许应用订阅一个或多个topic,并且对发布给他们的流数据进行处理。
- The Streams API 允许应用作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。
- The Connector API 允许构建并运行可重用的生产者或者消费者,将topic连接到已存在的应用或者数据系统。比如,连接到一个关系型数据库,捕捉数据表的所有变更内容。
关键点:
- Kafka中的topic总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。
- 偏移量(即offset)用来唯一的标识分区中每一条记录。
- Kafka集群所有发布的记录无论他们是否已被消费都会被保留,并可配置保留期限。
- 偏移量由消费者所控制。
Kafka的流行用例: http://kafka.apachecn.org/uses.html
注:以上资料包括图片均来自参考Kafka中文文档。
安装使用
以下全部以2.12-2.2.0版本的Kafka为基础说明。
- 首先下载并解压Kafka。
- 由于Kafka依赖于Zookeeper,所以你需要先下载安装Zookeeper。或者直接使用Kafka包内的Zookeeper脚本来启动一个单节点。
1 | > bin/zookeeper-server-start.sh config/zookeeper.properties |
- 指定配置文件启动Kafka。
1 | > bin/kafka-server-start.sh config/server.properties |
发送/接收
- 先创建一个topic。
1 | > bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic {topic_name} |
- 启动一个Producer去发送消息。
1 | > bin/kafka-console-producer.sh --broker-list localhost:9092 --topic {topic_name} |
这是命令行处于待输入状态。
- 启动一个Consumer去接收消息。
1 | > bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic {topic_name} --from-beginning |
这时,在producer的命令行中输入一行,在consumer的命令行中就会对应输出一行。
Java-Client使用
- 引入依赖
1 | <dependency> |
- Producer
1 | fun main() { |
- Consumer
1 | fun main() { |
启动应用,Producer发送消息时topic不存在会自动创建,可以观察到Consumer会不断输出。
1 | ... |