zookeeper和Kafka消息队列群集部署

消息队列概念

什么是消息队列

  • 消息(Message)是指在应用间传送的数据
  • 消息队列(Message Queue)是一种应用间通信方式解决方法,确保消息的可靠传输

消息队列的特征

存储

将消息存储在某种类型的缓冲区中,直到目标进程读取这些消息或将其从消息队列中显式移除为止

异步

消息队列通过缓冲消息可以在应用程序公开一定程度的异步性,允许源进程发送消息并在队列中累积消息,而目标进程则可以挑选消息进行处理

为什么需要消息队列

  • 解耦
  • 冗余
  • 扩展性
  • 灵活性
  • 峰值处理能力
  • 可恢复性
  • 顺序保证
  • 异步通信

kafka基础概念

什么是kafka

  • Kafka是一种高吞吐量的分布式发布/订阅消息系统
  • kafka是Apache组织下的一个开源系统
  • 可以实时的处理大量数据以满足各种需求场景

kafka角色术语

|----------------|---------------------------------------------------------------------------------------------------|
| 角色 | 概念 |
| Broker | Kafka集群包含一个或多个服务器,每个服务器被称为broker(经纪人) |
| Topic | 每条发布到Kafka集群的消息都有一个分类,这个级别被称为Topic(主题) |
| Producer | 指消息的生产者,负责发布消息到kafka broker |
| Consumer | 指消息的消费者,从kafka broker拉取消息,并消费这些已发布的消息 |
| Partition | Partition是物理上的概念,每个Topic包含一个或多个Partition,每个Partition都是一个有序的队列。Partition中的每条消息都会被分配一个有序的id(offset) |
| Consumer Group | 消费者组,可给每个Consumer指定消费组,如果不知道消费组,则属于默认的消费组 |
| Message | 消息,通信的基本单位,每个producer可以向一个topic发送一些消息 |

kafka拓扑架构

zookeeper

基础概念

是一种分布式协调技术,所谓分布式协调技术主要是用来解决分布式环境当中多个进程呢之间的同步控制,让他们有序的去访问某种共享资源,防止造成资源竞争(脑裂)的后果

工作原理

master启动

各节点向ZooKeeper中注册节点信息,以编号最小算法选举出一个主节点,另外的节点就是备用节点,由zookeeper完成对两个Master进程的调度,和主、备节点的分配和协作

master故障

如果主节点A发生了故障,这时候如果它在ZooKeeper所注册的节点信息会被自动删除,并会再次发出选举

master恢复

如果主节点恢复了,它会再次向ZooKeeper注册自身的节点信息,但注册的节点信息编号会变小,因此不会成为matser,而是另一台节点继续担任master

zookeeper架构

|----------|-----------------------------------------------------------------------------|
| 角色 | 描述 |
| Leader | 领导者角色,主要负责投票的发起和决议,以及更新系统状态 |
| follower | 跟随者角色,用于接收客户端的请求并返回结果给客户端,在选举过程中参与投票 |
| observer | 观察者角色,用户接收客户端的请求,并将这些请求转发给leader,同时同步leader状态,但是不参与投票。observer目的是扩展系统,提高伸缩性 |
| client | 客户端角色,用于向zookeeper发送请求 |

zookeeper在kafka中的作用

  • Broker注册
  • Topic注册
  • 生产者负载均衡
  • 消费者负载均衡
  • 记录消息分区与消费者的关系
  • 消息消费进度的offset记录
  • 消费者注册

单节点部署kafka

主机:kafka1:192.168.10.101

安装zookeeper

cpp 复制代码
[root@kafka1 ~]# yum -y install java
[root@kafka1 ~]# tar zxvf apache-zookeeper-3.6.0-bin.tar.gz
[root@kafka1 ~]# mv apache-zookeeper-3.6.0-bin /etc/zookeeper
[root@kafka1 ~]# cd /etc/zookeeper/conf
[root@kafka1 ~]# mv zoo_sample.cfg zoo.cfg
[root@kafka1 ~]# vim zoo.cfg 
dataDir=/etc/zookeeper/zookeeper-data
 
[root@kafka1 ~]# cd /etc/zookeeper/
[root@kafka1 kafka]# mkdir /etc/zookeeper/zookeeper-data/
[root@kafka1 zookeeper]# ./bin/zkServer.sh start
[root@kafka1 zookeeper]# ./bin/zkServer.sh status

安装kafka

cpp 复制代码
[root@kafka1 ~]# tar zxvf kafka_2.13-2.4.1.tgz 
[root@kafka1 ~]# mv kafka_2.13-2.4.1 /etc/kafka
[root@kafka1 ~]# cd /etc/kafka/
 
[root@kafka1 kafka]# vim config/server.properties 
log.dirs=/etc/kafka/kafka-logs		//60行
 
[root@kafka1 kafka]# mkdir /etc/kafka/kafka-logs
[root@kafka1 kafka]# bin/kafka-server-start.sh  config/server.properties &
检查两个端口的开启状态
[root@kafka1 kafka]# netstat -anpt | grep 2181
[root@kafka1 kafka]# netstat -anpt | grep 9092
 
 
//注意:启动时先启动zookeeper,关闭时先关闭kafka

测试

cpp 复制代码
//创建topic
./bin/kafka-topics.sh --create --zookeeper kafka1:2181 --replication-factor 1 --partitions 1 --topic test

//列出topic
./bin/kafka-topics.sh --list --zookeeper kafka1:2181

//查看topic
./bin/kafka-topics.sh --describe --zookeeper kafka1:2181 --topic test

//生产消息
./bin/kafka-console-producer.sh --broker-list kafka1:9092 -topic test

//消费消息(打开另一个终端,一边生产消息,一边查看消费消息)
./bin/kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test

//删除topic
./bin/kafka-topics.sh --delete --zookeeper kafka1:2181 --topic test

群集部署kafka

主机

kafka1:192.168.10.101

kafka2:192.168.10.102

kafka3:192.168.10.103

修改主机hosts文件(所有主机都配置)

cpp 复制代码
[root@kafka1 ~]# vim /etc/hosts
192.168.10.101 kafka1
192.168.10.102 kafka2
192.168.10.103 kafka3

zookeeper的部署

安装zookeeper(三个节点的配置相同)

cpp 复制代码
[root@kafka1 ~]# yum -y install java
[root@kafka1 ~]# tar zxvf apache-zookeeper-3.6.0-bin.tar.gz
[root@kafka1 ~]# mv apache-zookeeper-3.6.0-bin /etc/zookeeper

创建数据保存目录(三个节点的配置相同)

cpp 复制代码
[root@kafka1 ~]# cd /etc/zookeeper/
[root@kafka1 zookeeper]# mkdir zookeeper-data

修改配置文件(三个节点的配置相同)

cpp 复制代码
[root@kafka1 zookeeper]# cd /etc/zookeeper/conf
[root@kafka1 ~]# mv zoo_sample.cfg zoo.cfg
[root@kafka1 ~]# vim zoo.cfg 
dataDir=/etc/zookeeper/zookeeper-data
clientPort=2181
server.1=192.168.10.101:2888:3888
server.2=192.168.10.102:2888:3888
server.3=192.168.10.103:2888:3888

创建节点id文件(按server编号设置这个id,三个机器不同)

cpp 复制代码
节点1:
[root@kafka1 zookeeper-data]# echo 1 > myid
节点2:
[root@kafka2 zookeeper-data]# echo 2 > myid
节点3:
[root@kafka3 zookeeper-data]# echo 3 > myid

启动zookeeper进程

cpp 复制代码
[root@kafka1 conf]# cd /etc/zookeeper/
[root@kafka1 zookeeper]# ./bin/zkServer.sh start
[root@kafka1 zookeeper]# ./bin/zkServer.sh status

kafka的部署

kafka的安装(三个节点的配置相同)

cpp 复制代码
[root@kafka1 ~]# tar zxvf kafka_2.13-2.4.1.tgz
[root@kafka1 ~]# mv kafka_2.13-2.4.1 /etc/kafka

修改配置文件

cpp 复制代码
[root@kafka1 ~]# cd /etc/kafka/
[root@kafka2 kafka]# vim config/server.properties 
broker.id=1		##21行  修改,注意其他两个的id分别是2和3
listeners=PLAINTEXT://192.168.10.101:9092		#31行  修改,其他节点改成各自的IP地址
log.dirs=/etc/kafka/kafka-logs		## 60行  修改
num.partitions=1		##65行 分片数量,不能超过节点数
zookeeper.connect=192.168.10.101:2181,192.168.10.102:2181,192.168.10.103:2181

创建日志目录(三个节点的配置相同)

cpp 复制代码
[root@kafka1 kafka]# mkdir /etc/kafka/kafka-logs

在所有kafka节点上执行开启命令

生成kafka群集(三个节点的配置相同)

cpp 复制代码
[root@kafka1 kafka]# ./bin/kafka-server-start.sh config/server.properties & 
如果启动不了,可以将/etc/kafka/kafka-logs中的数据清除再试试

测试

cpp 复制代码
创建topic(任意一个节点)
bin/kafka-topics.sh --create --zookeeper kafka1:2181 --replication-factor 1 --partitions 1 --topic test

列出topic(任意一个节点)
bin/kafka-topics.sh --list --zookeeper kafka1:2181
bin/kafka-topics.sh --list --zookeeper kafka2:2181
bin/kafka-topics.sh --list --zookeeper kafka3:2181

生产消息
bin/kafka-console-producer.sh --broker-list kafka1:9092 -topic test

消费消息
bin/kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test

删除topic
bin/kafka-topics.sh --delete --zookeeper kafka1:2181 --topic test
相关推荐
李白客1 分钟前
数据库管理工具怎么选?Navicat、DataGrip、DBeaver 六维横向对比与选型建议
运维·数据库
马立杰2 分钟前
mysql中Illegal mix of collations for operation “UNION”错误的解决方法
数据库·sql·网络安全
Ivanqhz3 分钟前
BPE(Byte Pair Encoding) 算法
java·服务器·网络·深度学习·神经网络
蓝速科技4 分钟前
蓝速 K10 三防平板在工业恶劣工况下的选型与应用指南
大数据·运维·数据库·人工智能·科技
bksczm5 分钟前
MySQL基础篇之视图与用户管理
linux·数据库·sql·mysql
香菜TTT12 分钟前
怎么实现MySQL的主从同步机制
数据库·mysql
Ahtacca19 分钟前
Linux 基础实验:从终端操作到 C 语言编译
linux·运维·运维开发·虚拟机
邪修king19 分钟前
Re:Linux 系统篇(二十九):动静态库Chapter2:动态库深度辨析 —— 核心本质、制作流程、双阶段查找模型与排错指南
android·java·linux·开发语言
比奥利奥还傲.2 小时前
哪吒监控面板实战:部署 Dashboard、接入 Agent、钉钉告警,再配置固定公网访问
网络·人工智能·分布式·1024程序员节
云泽8082 小时前
从零搭建 WSL2 + Ubuntu C/C++ 开发环境:原理、实践与底层架构解析
linux·c++·windows·ubuntu·wsl2