消息队列
两种模式
- 点对点(一对一,消费者消费后立刻清除消息)
- 发布、订阅模式(一对多,消费者消费数据之后不会清除消息)
基础架构
- Producer:消息生产者,想kafka broker发送消息的客户端
- Consumer:消息消费者,想kafka broker取消息的客户端
- Consumer Group(CG):消费者组,多个Consumer组成。
消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个消费者消费;消费者组之间互不影响
,所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者
- Broker:一台kafka服务器就是一个broker,一个集群由多个broker组成。一个broker可以容纳多个topic
- topic:可以理解为一个队列,
生产者和消费者面向的都是一个topic
- Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,
一个topic可以分为多个partition
,每个partition是一个有序的队列 - Replica:副本,为保证集群中的某个节点发生故障时,
该节点上的partition数据不丢失,且Kafka仍然能够继续工作
,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader
和若干个follower
- leader:每个分区多个副本的主,生产者发送数据的对象,以及消费者消费数据的对象都是leader
- follower:每个分区多个副本中的从,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的follower
安装
普通安装
# 解压
tar -zxvf kafka_2.13-2.5.0.tgz
# 创建log文件夹(在kafka目录下)
mkdir logs
############################
# 修改文件server.properties
vim config/server.properties
# 1. broker.id(每个服务器唯一)
broker.id=1
delete.topic.enable=true
# 2. 日志路径
log.dirs=/home/soft/kafka/kafka_2.13-2.5.0/logs
# 3. zookeeper路径
zookeeper.connect=192.168.199.132:2181
# 4. listeners
listeners=PLAINTEXT://192.168.199.133:9092
# 环境变量
vim /etc/profile
export KAFKA_HOME=/home/soft/kafka/kafka_2.13-2.5.0
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile
############################
# 启动
bin/kafka-server-start.sh -daemon config/server.properties
终端操作
## 在kafka目录下
# 启动
bin/kafka-server-start.sh -daemon config/server.properties
# 停止
bin/kafka-server-stop.sh stop
# 查看该节点在zookeeper下的topic
bin/kafka-topics.sh --zookeeper 192.168.199.132:2181 --list
# 创建topic 名称+分区数+每个分区的副本数(leader+follower)
bin/kafka-topics.sh --zookeeper 192.168.199.132:2181 --create --topic first --partitions 3 --replication-factor 2
# 查看某个topic的详情(如first)
bin/kafka-topics.sh --zookeeper 192.168.199.132:2181 --describe --topic first
# 删除某个topic
bin/kafka-topics.sh --zookeeper 192.168.199.132:2181 --delete --topic first
# 修改分区数(只能增加不能减少,因为减少了分区的数据不好处理,Kafka还没实现)
bin/kafka-topics.sh --zookeeper 192.168.199.132:2181 --topic first --alter --partitions 5
#生产者启动
bin/kafka-console-producer.sh --topic first --broker-list 192.168.199.132:9092
#消费者监听(加上 --from-beginning:会把之前的数据都取出来)
bin/kafka-console-consumer.sh --topic first --bootstrap-server 192.168.199.132:9092