zookeeper和Kafka消息队列群集部署

消息队列概念

什么是消息队列

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

消息队列的特征

存储

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

异步

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

 为什么需要消息队列

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

kafka基础概念

什么是kafka

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

kafka角色术语

角色概念
BrokerKafka集群包含一个或多个服务器,每个服务器被称为broker(经纪人)
Topic每条发布到Kafka集群的消息都有一个分类,这个级别被称为Topic(主题)
Producer指消息的生产者,负责发布消息到kafka broker
Consumer指消息的消费者,从kafka broker拉取消息,并消费这些已发布的消息
PartitionPartition是物理上的概念,每个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

[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

[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

测试

//创建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文件(所有主机都配置)

[root@kafka1 ~]# vim /etc/hosts
192.168.10.101 kafka1
192.168.10.102 kafka2
192.168.10.103 kafka3

zookeeper的部署

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

[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/
[root@kafka1 zookeeper]# mkdir zookeeper-data

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

[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,三个机器不同)

节点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进程

[root@kafka1 conf]# cd /etc/zookeeper/
[root@kafka1 zookeeper]# ./bin/zkServer.sh start
[root@kafka1 zookeeper]# ./bin/zkServer.sh status

kafka的部署

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

[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@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

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

[root@kafka1 kafka]# mkdir /etc/kafka/kafka-logs

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

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

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

测试

创建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
  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Docker部署ZookeeperKafka的步骤: 1. 安装Docker和Docker Compose 2. 创建Docker Compose文件 在本地目录中创建一个名为docker-compose.yml的文件,并添加以下内容: ``` version: "3" services: zookeeper: image: zookeeper ports: - "2181:2181" environment: ZOO_MY_ID: 1 volumes: - ./data/zookeeper/data:/data - ./data/zookeeper/datalog:/datalog kafka: image: wurstmeister/kafka ports: - "9092:9092" environment: KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "test:1:1" volumes: - ./data/kafka:/kafka depends_on: - zookeeper ``` 此文件定义了两个服务:ZookeeperKafkaZookeeper服务使用官方的Zookeeper镜像,Kafka服务使用wurstmeister的Kafka镜像。 3. 启动服务 在终端中,进入含有docker-compose.yml文件的目录中,然后运行以下命令: ``` docker-compose up -d ``` 此命令将启动ZookeeperKafka服务,并将它们作为Docker容器在后台运行。 4. 验证服务 在浏览器中访问http://localhost:2181/,应该会看到Zookeeper的管理界面。您还可以使用以下命令在Kafka上创建一个测试主题: ``` docker-compose exec kafka \ kafka-topics.sh --create \ --zookeeper zookeeper:2181 \ --replication-factor 1 \ --partitions 1 \ --topic test ``` 使用以下命令在Kafka上发布一条消息: ``` docker-compose exec kafka \ bash -c "echo 'hello, world' | kafka-console-producer.sh --broker-list localhost:9092 --topic test && echo 'Produced 1 message.'" ``` 最后,使用以下命令在Kafka上消费消息: ``` docker-compose exec kafka \ kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning ``` 如果您能够在终端中看到“hello, world”消息,则表明Kafka已经成功运行。 5. 停止服务 在终端中,进入docker-compose.yml文件所在的目录中,并运行以下命令: ``` docker-compose down ``` 此命令将停止并删除ZookeeperKafka容器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值