官方网站: kafka.apache.org
官方手册: http://kafka.apache.org/documentation.html
一些技术博客:
- w3c_school: https://www.w3cschool.cn/apache_kafka/
- orchome: https://www.orchome.com/kafka/index
- www.tonglei.win: http://www.tonglei.win/post/shortcodes/kafka-%E8%B5%84%E6%BA%90%E6%95%B4%E7%90%86/
Kafka 适用于
- 消息队列 可以类比于 ActiveMQ 或是 RabbitMQ
- 网站活跃度分析跟踪 用于检测 Web 应用的访问次数与用户行为
- 监控工具 检测应用的用户行为,并用于分析
- 日志聚合中心
- 用于处理流
- 消息源
- 日志同步 可类比于 Apache BookKeeper
组件与角色
- Topics(主题) 特定类型的消息
- Partition(分区) 主题内对消息的实际存储空间
- Partition offset(分区偏移) 分区内消息的序列标识号
- Replicas of partition(分区备份) 用于备份数据,防止分区内数据丢失
- Brokers(经纪人/代理人) 用于维护和发布分区上数据的服务。一个分区至多有一个代理人,一个代理人可以管理0或多个分区,代理是无状态的
- Kafka Cluster(Kafka集群) 具有多个代理的kafka应用被称为kafka集群,扩展kafka集群无需停机
- Producers(生产者) 向kafka主题推送消息(生产者 -> 主题 -> 代理人 -> 分区)
- Consumers(消费者) 从kafka主题读取消息
- Leader(领导者) 分区所在服务器中,唯一一个负责读写分区内数据的服务器,每个分区必有一个 leader
- Follower(追随者) 备用 leader, 当 leader 失败后,kafka 会从 follower 中选举一个新的leader。follower平时是一个普通的 Consumer
- Zookeeper 用于管理和协调Kafka代理,通知生产者和消费者新产生或失败的代理
常用操作
Kafka 安装
-
安装 Java
-
安装和启动 Zookeeper (默认 localhost:2181)
-
下载解压最新 kafka https://www.apache.org/dyn/closer.cgi?path=/kafka/2.2.0/kafka_2.12-2.2.0.tgz
$ wget https://www.apache.org/dyn/closer.cgi?path=/kafka/2.2.0/kafka_2.12-2.2.0.tgz $ tar -zxf kafka_2.12-2.2.0.tgz
-
启动服务 (默认 9092)
$ bin/kafka-server-start.sh config/server.properties
-
停止服务
$ bin/kafka-server-stop.sh
Kafka 启动
$ bin/kafka-server-start.sh config/server.properties
创建单节点主题
创建 1个分区 1个备份 名为 "custom-topic-name" 的主题,并同步到 Zookeeper(localhost:2181)
$ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1
--partitions 1 --topic custom-topic-name
主题列表
$ bin/kafka-topics.sh --list --zookeeper localhost:2181
启动生产者
Kafka 自带终端控制指令,可在命令行向 Kafka 主题发送消息
$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic custom-topic-name
...
hello world
启动消费者
Kafka 自带终端控制指令,可在命令行打印主题内的新消息
bin/kafka-console-consumer.sh --zookeeper localhost:2181 —topic custom-topic-name
--from-beginning
...
hello world
单节点多代理
复制 server.properties 到两个新文件 [server-one.properties, server-two.properties]
config / server-one.properties
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=1
# The port the socket server listens on
port=9093
# A comma seperated list of directories under which to store log files
log.dirs=/tmp/kafka-logs-1
config / server-two.properties
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=2
# The port the socket server listens on
port=9094
# A comma seperated list of directories under which to store log files
log.dirs=/tmp/kafka-logs-2
在每台机器(节点)上分别启动
bin/kafka-server-start.sh config/server.properties
bin/kafka-server-start.sh config/server-one.properties
bin/kafka-server-start.sh config/server-two.properties
创建多节点主题
--replication-factor 3, 3 = 代理数
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 -partitions 1 --topic custom-multi-broker-topic-name
查看多节点主题描述
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic custom-multi-broker-topic-name
修改主题
bin/kafka-topics.sh —zookeeper localhost:2181 --alter --topic custom-topic-name --partitions (count)
删除主题
bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic custom-topic-name