一、Kafka架构
1、消息队列(Message Queue)
1.1、点对点模式
一对一,消费者主动拉取数据,消息收到后消息清除
生产者将消息发送到Queue中,然后消费者从queue里拉取数据,一条消息被消费了之后,queue就删除了该消息。
虽然queue支持存在多个消费者,但是一条消息只有一个消费者能消费到
1.2、发布/订阅模式
一对多,消费者消费数据之后不会清除数据
生产者将消息发布到topic中,同时有多个消费者消费该消息,topic里面的消息会被所有消费者消费
Kafka基于发布/订阅模式
2、基础架构
- broker:一个Kafka服务器就是一个broker,一个broker可以容纳多个topic
- topic:一个消息队列,生产者将消息发布到topic里面,消费者从topic订阅
- producer:生产者。
- consumer:消费者
- consumer group(CG):消费者组,一个CG由多个Consumer组成,消费者组内的每个消费者负责消费不同分区的数据,一个分区只能由一个消费者消费。消费者组之间互不干扰,一个消费者就是一个订阅者
- partition:一个非常大的topic可以分不到多个broker上,一个topic可以分为多个partition
- replica:副本,为了保障数据可靠性,当某个节点发生故障时,该节点上的partition数据不丢失,且Kafka仍然能够继续工作,Kafka提供了副本机制,一个topic的每个partition都有若干个副本,一个leader和若干个follower
- leader:每个分区多个副本的"主",所有的操作都是对于leader
- follower:从副本,实时从leader中同步数据,保持和leader数据的同步,leader发生故障时,某个follower就会成为新的leader
二、Kafka操作
1、命令行基本操作
-
查看当前broker中所有topic
kafka-topics.sh --zookeeper hadoop102:2181/kafka --list
-
创建topic
kafka-topics.sh --zookeeper hadoop102:2181/kafka \ --create --replication-factor 3 \ --partitions 1 \ --topic first
-
删除topic
kafka-topics.sh --zookeeper hadoop102:2181/kafka \ --delete --topic first 注意: 需要server.properties中设置delete.topic.enable=true否则只是标记删除。
-
发送消息
kafka-console-producer.sh \ --broker-list hadoop102:9092 --topic first >hello world
-
消费消息
kafka-console-consumer.sh \ --bootstrap-server hadoop102:9092 --from-beginning --topic first --from-beginnein:全部读取
-
查看某个topic的详情
kafka-topics.sh --zookeeper hadoop102:2181/kafka \ --describe --topic first
-
修改分区数
kafka-topics.sh --zookeeper hadoop102:2181/kafka --alter --topic first --partitions 3
2、集群启动停止脚本
2.1、创建脚本:
#! /bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo "=============$i==========="
ssh $i 'source /etc/profile && $KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties'
echo $?
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo "=============$i==========="
ssh $i 'source /etc/profile && $KAFKA_HOME/bin/kafka-server-stop.sh'
echo $?
done
};;
esac
2.2、全局有效
sudo ln xxx.sh /usr/local/bin