zookeeper集群+Kafka集群

zookeeper是一个开源的,为分布式架构提供协调服务的APACHE的项目

保存元数据

zookeeper的工作机制

观察者模式设计的分布式服务器管理架构

负责存储和管理元数据,记录集群的变化。保存集群变化的信息。

zookeeper的特点:

1、在集群中分为领导者和追随者,组成的集群。

2、只要半数以上的节点正常工作,整个zookeeper就可以正常工作。zookeeper在部署时一般选择奇数台。

3、全局数据一致,每个zookeeper不论领导者还是追随者,在访问他们的数据时都是一致的

4、数据更新的原子性,一次更新数据,要么都成功,要么都失败

5、数据更新的实时性

6、领导者追随者根据投票产生

选举机制:

A B C

1、服务器A启动 发起一次选举,A会投自己一票。A有一票,不够半数。选举无法完成。A进入looking状态

2、服务器B启动,再发起一次选举,服务器B也投自己一票。服务A和B会做个比较,myid,谁的myid大。

如果A比B小,A会把票改投给B,2票,B自动当选为leader

3、C启动,自动成为追随者,A也会追随者。

 

配置文件:

server.1=192.168.233.21:3188:3288

server.1 数字id 也是服务器对应的myid

192.168.233.21服务器的ip地址

3188:zookeeper集群内部通信的端口

3288:重新选举端口,万一leader挂了,用这个端口进行内部通信,选举新的leader

Zookeeper 集群的部署 

实验组件的部署 

主机ip地址
redis1192.168.233.41
redis2192.168.233.42
redis3192.168.233.43

对三台服务器均操作执行 :

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
 
#安装 JDK
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
java -version
 
#把zookeeper3.5.7的安装包拖进来解压安装
tar -xf apache-zookeeper-3.5.7-bin.tar.gz
#修改文件名
mv apache-zookeeper-3.5.7-bin.tar.gz /opt/zookeper
cd zookeepe/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
第二行
tickTime=2000
#服务端与客户端之间心跳线时间,2秒检测一次服务器和客户端之间的通信。
initLimit=10
#领导者和追随者之间。初始连接时能够容忍的超时时间。10:10*tickTime=2000ms=10*2S=20S
syncLimit=5
#同步超时时间。领导者和追随者之间,同步通信超时的时间。5:5*2s=10s。如果超过这个时间。leader会认为follower丢失,会把他移除集群
dataDir=/opt/zookeeper/data
#保存数据的目录,需要单独创建
clientPort=2181
#提供的对外访问端口2181
在16行插入
dataLogDir=/opt/zookeeper/logs
#创建日志文件位置
在最后一行插入
server.1=192.168.233.41:3288
#1:每个zookeeper集群的初始myid
#3188:领导者和追随者之间交换信息的端口(内部通信的端口)
#3288:一旦leader丢失响应,开启选举,3288就是用来执行选举时的服务器之间通信端口。
server.2=192.168.233.42:3188:3288
server.3=192.168.233.43:3288
cd zookeeper
mkdir data logs
#创建在配置文件中定义的两个目录
 
开始分配myid
cd data
echo 1 > myid
#在11主机
echo 2 > myid
#在12主机
echo 3 > myid
#在13主机
三台主机同时创建:
vim /etc/init.d/zookeeper
#创建启动脚本
chmod +x /etc/init.d/zookeeper
#给脚本添加执行权限
chkconfig --add zookeeper
#给脚本添加系统服务
service zookeeper start
#三台主机分别启动zookeeper脚本文件
查看zookeeper的状态
leader和follower分配完成
此时1和2为follower
3是leader
zookeeper配置完成

 

kafka概述:

消息队列:MQ

在高并发环境下,同步的请求来不及处理,请求太多会造成阻塞

比如说大量请求并发到数据库,too many connection报错

消息队列,使用异步处理方式,可以缓解系统处理请求的压力

工作流程数据流向:

 

 

kafka的作用:

1、异步处理,

2、系统解耦

每个系统之间独立运行,互相之间没有必然的依赖关系。

微服务架构中的通信对于解耦来说至关重要。

各个微服务之间独立运行,分别处理各自的请求和消息。提高整个系统的吞吐量和处理能力。

电商的订单系统。网站的工单系统,典型的一个消息队列场景。

3、负载均衡

消息队列的负载均衡:把任务发送到多个消费者,过个消费者可以并发处理队列中的消息。

4、流量控制和限流

通过延迟方法,处理生产速率和消费者的处理速度(代码控制)

5、数据同步和分发

跨系统的数据同步和日志收集

6、任务调度和定时任务

7、实时数据处理

8、备份和恢复

Kafka部署

实验准备:
192.168.233.41 zookeeper+Kafka1
192.168.233.42 zookeeper+Kafka2
192.168.233.43 zookeeper+Kafka3
 
tar -xf kafka_2.13-2.7.0.tgz
mv kafka_2.13-2.7.0 kafka2.7
vim /etc/profile
source /etc/profile
#使文件立即生效
修改配置文件:
cd confing/
cp server.properties server.properties.bak
取消同步开始修改配置文件:
vim server.properties
21行
broker.id=1
#三台机器的id不能重复
28行
#声明监听端口和id。如果声明了broker.id,这一行可以默认不动
42行
num.network.threads=3
#处理网络请求的线程数量,默认即可
46行
num.io.threads=8
#处理磁盘的io线程数量,一定要比硬盘数大。默认即可
50行
socket.send.buffer.bytes=102400
#发送套接字的缓冲区大小。默认即可
54行
socket.receive.buffer.bytes=102400
#接收者的接受套接字缓冲区大小。默认即可
58行
socket.reques.max.bytes=104657600
#请求套接字的缓冲区大小。单位是字节
65行
log.idrs=/var/log/kafka
#指定日志路径
70行
num.partitions=1
#在此Kafka服务器上创建topic,如果不指定默认分区数。默认是1个如果指定了这个配置无效
75行
num.recovery.threads.per.data.dir=1
#用于恢复、回收、清理data下的数据的线程数量。Kafka默认不允许删除主题
110行
log.retention.hours=168
#生产者发布的数据文件在主题当中保存的时间
#168:单位是小时。默认是7天
130行
zookeeper.connect=192.168.233.41:2181,192.168.233.42:2181,192.168.233.43:2181
#配置连接zookeeper集群
其他两台机器修改id后
到65行修改日志信息
log.idrs=/var/log/kafka
到123行修改即可
zookeeper.connect=192.168.233.41:2181,192.168.233.42:2181,192.168.233.43:2181
 
三台机器同时操作
创建启动文件脚本
vim /etc/init.d/kafka
#创建标本文件
chmod +x /etc/init.d/kafka
#给脚本文件执行权限
chkconfig --add kafak
#添加到系统队列中
service kafka start
#启动Kafka
#Kafka的默认端口号9092
netstat -antp | grep 9092
#查看服务端口是否启动
 

消息队列的模式:

1、点对点 一对一消费者消费完数据之后,生产者自动清除 已消费的数据

一个生产者对应一个消费者(淘汰)

2、发布订阅模式(一对多,观察者模式,消费者数据在 消息消费完之后不会被清除(保留一段时间)

生产者发布一个消息,可以是一个消费者使用,也可以是多个消费者同时使用(主流)

kafka就是发布/订阅模式的消息队列 RAbbitMQ也是发布/订阅模式的消息队列。小集群内部使用。

大数据的实时处理领域

kafka的特性:

高吞吐量,低延迟

每秒可以处理几十万条数据,延迟只有几毫秒

集群的可扩展性(热扩展)

消息的持久化:生产者发布的消息可以保存到磁盘当中,防止数据丢失(有时间限制)

容错性:挂了一个可以继续使用

高并发:数千个客户端可以同时读写

kafka的组件:

tpoic 主题,kafka的基本单元,所有生产者发布的消息都是发到主题

消费者订阅主题,然后消费生产者发布的消息

消费者 订阅主题,消费生产者发布的消息

分区:每个主题都可以分成多个分区,每个分区都是数据的有序子集

分区当中保留数据,按照偏移量来有序的存储数据。消费者可以根据偏移量来消费指定分区当中的消息

偏移量:消费在分区当中的唯一标识,跟踪和定位消息所在的位置。消费可以根据偏移量来处理信息

分区还有备份的作用:我们在创建主题时创建分区,创建分区时要指定副本数

分区和我们执行的集群机器数量一般是保持一致

副本:备份区中的消息,最少2个,互为备份

经纪人 broker 经纪人处理生产者和消费者的请求(kafka)元数据(zookeeper)

zookeeper:保存元数据

kafka的工作流程:

生产者将消息发布到指定的主机,每个消息都附带一个key和value

主题是有多个分区的,生产者把消息写入一个分区(带偏移量)

经纪人(kafka):分配和处理生产者的发布请求,偏移量也是经纪人分配(在分区中是唯一的)

消费者订阅主题,获取全量的消费者的消费信息(默认模式),也可以从执行的分区获取消息(代码来完成,一般不用)

生产者发布的消息会在本地保留一段时间,防止消费者有延迟或者处理速度过慢,导致没有成功消费。保留时间7天

创建主题

 kafka-topics.sh --create --bootstrap-server 192.168.233.41:9092,192.168.233.42:9092,192.168.233.43:9092 --replication-factor 2 --partitions 3 --topic test10

#replication-factor 2 创建分区的副本数2
#partitions 3 分区数
#topic test1 指定主题的名称

 创建消费者

kafka-console-producer.sh --broker-list 192.168.233.41:9092,192.168.233.42:9092,192.168.233.43:9092 --topic test10

使用另一台主机查看

查看主题的详细信息

kafka-topics.sh --describe --bootstrap-server 192.168.233.41:9092,192.168.233.42:9092,192.168.233.43:9092

Topic:主题名称

Partition:分区,偏移量

leader:分区的领导者,用来处理分区的读写操作,只有在指定写和指定读分区时才工作。如果不是指定,全量展示,无意义。

Replicas:副本,1 2 3--broker id

ISR:表示当前与领导者同步的副本。

 

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基本的在k8s上部署zookeeper + kafka集群的配置教程: 1. 创建一个namespace 首先,我们需要创建一个namespace,用于部署zookeeperkafka集群。可以使用以下命令创建一个名为“zookeeper-kafka”的namespace: ``` kubectl create namespace zookeeper-kafka ``` 2. 部署Zookeeper 接下来,我们需要部署Zookeeper。可以使用以下YAML文件创建一个Zookeeper服务: ``` apiVersion: v1 kind: Service metadata: name: zookeeper spec: selector: app: zookeeper ports: - name: client port: 2181 protocol: TCP - name: follower port: 2888 protocol: TCP - name: leader port: 3888 protocol: TCP --- apiVersion: apps/v1 kind: StatefulSet metadata: name: zookeeper spec: serviceName: zookeeper replicas: 3 selector: matchLabels: app: zookeeper template: metadata: labels: app: zookeeper spec: containers: - name: zookeeper image: zookeeper:3.5.8 ports: - name: client containerPort: 2181 - name: follower containerPort: 2888 - name: leader containerPort: 3888 volumeMounts: - name: datadir mountPath: /data env: - name: ZOO_MY_ID valueFrom: fieldRef: fieldPath: metadata.name - name: ZOO_SERVERS value: zookeeper-0.zookeeper:2888:3888,zookeeper-1.zookeeper:2888:3888,zookeeper-2.zookeeper:2888:3888 volumeClaimTemplates: - metadata: name: datadir spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi ``` 这将创建一个3个Pod的Zookeeper StatefulSet,并创建一个名为“zookeeper”的Service,暴露Zookeeper的客户端端口2181,follower端口2888和leader端口3888。 3. 部署Kafka 现在,我们可以部署Kafka。以下是一个Kafka部署的YAML文件示例: ``` apiVersion: v1 kind: Service metadata: name: kafka spec: type: NodePort selector: app: kafka ports: - name: kafka port: 9092 nodePort: 30092 protocol: TCP --- apiVersion: apps/v1 kind: StatefulSet metadata: name: kafka spec: serviceName: kafka replicas: 3 selector: matchLabels: app: kafka template: metadata: labels: app: kafka spec: containers: - name: kafka image: wurstmeister/kafka:2.13-2.7.0 ports: - name: kafka containerPort: 9092 env: - name: KAFKA_BROKER_ID valueFrom: fieldRef: fieldPath: metadata.name - name: KAFKA_ZOOKEEPER_CONNECT value: zookeeper-0.zookeeper:2181,zookeeper-1.zookeeper:2181,zookeeper-2.zookeeper:2181 - name: KAFKA_ADVERTISED_LISTENERS value: PLAINTEXT://$(hostname -f):9092 - name: KAFKA_LISTENERS value: PLAINTEXT://0.0.0.0:9092 - name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR value: "3" volumeMounts: - name: datadir mountPath: /data volumeClaimTemplates: - metadata: name: datadir spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi ``` 这将创建一个3个Pod的Kafka StatefulSet和一个名为“kafka”的Service,它将Kafka的9092端口暴露为NodePort 30092。 4. 验证部署 现在,您可以使用以下命令检查ZookeeperKafka是否正在运行: ``` kubectl get pods -n zookeeper-kafka ``` 您应该看到3个Zookeeper和3个Kafka Pod处于“Running”状态。 接下来,您可以使用以下命令检查Kafka是否正在监听端口30092(或您自己选择的端口): ``` kubectl get services -n zookeeper-kafka ``` 您应该看到一个名为“kafka”的service,它将Kafka的9092端口暴露为30092端口。可以使用此端口测试Kafka是否正常运行。 至此,您已经成功地在k8s上部署了zookeeper + kafka集群
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值