0


zookeeper与kafka

ELK FK

KAFKA带入集群当中。

zookeeper集群+kafka集群

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

保存源数据。

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大。如果A比B小,A会把票改投给B,B两票自动当选为leader。

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

安装zookeeper
[root@mysql1 opt]# ls
apache-zookeeper-3.5.7-bin.tar.gz 
安装包解压
[root@mysql1 opt]# tar -xf apache-zookeeper-3.5.7-bin.tar.gz 
[root@mysql1 opt]# mv apache-zookeeper-3.5.7-bin /opt/zookeeper
#zookeeper的配置文件
[root@mysql1 conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[root@mysql1 conf]# cp zoo_sample.cfg zoo.cfg
修改配置文件
[root@mysql1 conf]# vim zoo.cfg 
tickTime=2000
#通信心跳时间:zookeeper服务端和客户端之间通信的间隔时间,单位是毫秒
initLimit=10
#leader和follower初始连接时,最多能容忍的心跳数。秒
syncLimit=5
#leader和follower之间同步通信的超时时间,5*2的时间内发生超时,leader就认为follower死了会从集群当中将他删除
#example sakes
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs
clientPort=2181
server.1=192.168.65.11:3188:3288
server.2=192.168.65.12:3188:3288
server.3=192.168.65.13:3188:3288
#server.1数字id 也就是服务器对应的myid
#192.168.65.11 服务器的ip地址
#3188:zookeeper集群内部通信的端口
#3288:重新选举端口,万一leader挂了,用这个端口进行内部通信,选举新的leader.
​
[root@mysql1 conf]# mkdir /opt/zookeeper/data  #创建目录data
[root@mysql1 conf]# mkdir /opt/zookeeper/logs  ##创建目录logs
[root@mysql1 conf]# echo 1 > /opt/zookeeper/data/myid   #三台分别输入1/2/3设为myid
[root@mysql1 conf]# vim /etc/init.d/zookeeper     
启动脚本
#!/bin/bash
#chkconfig:2345 20 90
#description:Zookeeper Service Control Script
ZK_HOME='/opt/zookeeper'
case $1 in
start)
    echo "---------- zookeeper 启动 ------------"
    $ZK_HOME/bin/zkServer.sh start
;;
stop)
    echo "---------- zookeeper 停止 ------------"
    $ZK_HOME/bin/zkServer.sh stop
;;
restart)
    echo "---------- zookeeper 重启 ------------"
    $ZK_HOME/bin/zkServer.sh restart
;;
status)
    echo "---------- zookeeper 状态 ------------"
    $ZK_HOME/bin/zkServer.sh status
;;
*)
    echo "Usage: $0 {start|stop|restart|status}"
esac
#赋权
[root@mysql1 conf]# chmod +x /etc/init.d/zookeeper
[root@mysql1 conf]# chkconfig --add zookeeper
#启动查看谁是leader
[root@mysql1 conf]# service zookeeper start
---------- zookeeper 启动 ------------
/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@mysql1 conf]# service zookeeper status
---------- zookeeper 状态 ------------
/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
​
[root@mysql2 conf]# service zookeeper start
---------- zookeeper 启动 ------------
/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@mysql2 conf]# service zookeeper status
---------- zookeeper 状态 ------------
/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
[root@mysql3 conf]# service zookeeper start
---------- zookeeper 启动 ------------
/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@mysql3 conf]# service zookeeper status
---------- zookeeper 状态 ------------
/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
​
kafaka概述:

消息队列:MQ

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

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

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

kafka的作用:

1、异步处理

2、系统解耦:每个系统之间独立运行,互相之间没有必然依赖关系。

微服务建构中的通信对于解耦至关重要

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

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

3、负载均衡

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

4、流量布置和限流

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

5、数据同步和分发

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

6、任务调度和定时任务

7、实时数据处理

8、备份和恢复

消息队列的模式

1、点对点就是一对一,消费者消费完数据之后,生产者会清除已消费的数据。

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

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

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

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

大数据的实时处理领域

kafka的特性:

1、高吞吐量,低延迟

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

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

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

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

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

kafka的组件:

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

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

2、生产者:把消息发布到主题

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

4、分区:每个主题都可以分成多个分区,每个分区都是数据的有序子集,分区当中保留数据,按照偏移量来有序的存储数据。消费者可以根据偏移量来消费指定分区当中的信息(一般不用)

分区还有备份的作用:我们在创建主题时创建分区,创建分区时要制定副本数,分区和我们执行的集群机器数量是一致的。

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

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

7、zookeeper:保存元数据。(IP地址)

kafka的工作流程:

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

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

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

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

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

Topic: test1 Topicld: VNuBK4MSRiOSrlaoHlWLnQ PartitionCount: 3 ReplicationFactor: 2 configs.
Topic: test1 Partition:0 Leader:0 Replicas:0,2 lsr: 0,2
Topic: test1Partition:1Leader:2Replicas: 2,1lsr: 2.1
Topic: test1 Partition:2 Leader:t Replicas: 1,0 lsr: 1,0
topic:主题名称
Partition:分区 偏移量
leader: 分区的领导者,用来外理分区的读写操作。只有在指定写分区和指定读分区时才工作。如果不是指定,全量展示,无意义。
Replicas:副本,01 2-------broker id
IsR: 表示当前于领导者同步的副本。0  1  2
创建主题命令
[root@mysql1 config]# kafka-topics.sh --create --bootstrap-server 192.168.65.11:9092,192.168.65.12:9092,192.168.65.13:9092 --replication-factor 2 --partitions 3--topic test5
​
​
消费查看
kafka-console-consumer.sh --bootstrar 192.168.65.11:9092 192.168.65.12:9092,192.168.65.13:9092 --topic test9 --from-beginning
查看主题
kafka-topics.sh --list --bootstrap-server 192.168.65.11:9092,192.168.65.12:9092,192.168.65.13:9092

总结

zookeeper就是保存集群的元数据

kafka工作流程

kafka的消息堆积该如何解决:

消费者出现延迟或者处理能力太差,导致消息堆积。

1、减少kafka持久化的保存时间

2、修改主题的分区数,扩大分区的数量提高消费者获取的通道

3、可以指定多个消费者共同工作,处理消息的挤压


本文转载自: https://blog.csdn.net/2402_84844434/article/details/140929790
版权归原作者 王-先生 所有, 如有侵权,请联系我们删除。

“zookeeper与kafka”的评论:

还没有评论