Kafka简介
Kafka消息由键、值、时间戳组成,同一类别的消息称为主题。
主题会有多个订阅者,每个主题维护着一组分区日志,每个分区位于不同服务器上,每次只会向其中一个分区写入数据,并分配分区偏移量offset。
Kafka消息会保存一段时间,不管是否被消费。
消费者通过offset来读取对应的消息,每读取一条offset自动加1。
多个消费者实例组成消费者组,主题会将消息发往所有消费者组,并只会被该组的一个消费者实例消费掉。
下载安装
wget http://mirrors.hust.edu.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz
tar –xzf kafka_2.11-2.0.0.tgz
cd kafka_2.11-2.0.0
安装Screen会话:
yum -y install screen
screen -ls -> 所有会话列表
screen -S name -> 新建会话
screen -r name -> 进入会话(CTRL + A +D,离开会话)
启动服务
- Kafka依赖于ZooKeeper,首先启动ZooKeeper服务,如果服务未启动,Kafka提供了快速启动脚本:
screen -S zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
- 启动Kafka服务
screen -S kafka-server
bin/kafka-server-start.sh config/server.properties
消息主题
- 创建主题
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test - 删除主题
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test - 主题列表
bin/kafka-topics.sh --list --zookeeper localhost:2181 - 查看主题
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
每一行代表一个分区,部分参数说明:
“leader” 负责所有的读写操作
“replicas” 副本节点
“isr” 存活节点 - 查看主题offset
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test --time -1
–time -1 # get latest offset
–time -2 # get smallest offset - 查看主题内容
bin/kafka-run-class.sh kafka.tools.SimpleConsumerShell --broker-list localhost:9092 --topic test --max-messages 1 --offset 1 --partition 0 - 分区扩容
bin/kafka-topics.sh --zookeeper localhost:2181 -alter --partitions 2 --topic test - 发送消息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test - 消费消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
Kafka集群
- 新增节点配置
cp config/server.properties config/server-1.properties
cp config/server.properties config/server-2.properties
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/tmp/kafka-logs-2
- 启动新增节点
bin/kafka-server-start.sh config/server-1.properties &
bin/kafka-server-start.sh config/server-2.properties &
- 集群测试
bin/kafka-topics.sh --create --zookeeper localhost:2181
--replication-factor 3 --partitions 1 --topic my-replicated-topic
bin/kafka-topics.sh --describe --zookeeper localhost:2181
--topic my-replicated-topic
bin/kafka-console-producer.sh --broker-list localhost:9092
--topic my-replicated-topic
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092
--from-beginning --topic my-replicated-topic
ps aux | grep server-1.properties
kill -9 pid
bin/kafka-topics.sh --describe --zookeeper localhost:2181
--topic my-replicated-topic
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092
--from-beginning --topic my-replicated-topic
Kafka读写外部数据
a) 创建外部数据源
echo -e “foo\nbar” > test.txt
b) 启动 connectors
bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties
包含三个配置文件参数,第一个用于配置Kafka Connect Process,后两个分别用于创建两个connector,
source connector:从test.txt读取数据到connect-test 主题
sink connector:从connect-test主题读取数据,并写入到test.sink.txt文件
c) 查看目标文件
more test.sink.txt
d) 查看topic数据
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginning
e) 追加数据
echo Another line>> test.txt