消息队列之zookeeper

author author     2023-02-22     572

关键词:

参考技术A 分布式协调技术----zookeeper

分布式协调技术是用来解决分布式环境中多个进程间的同步控制,使他们能有序的访问某种临界资源,防止造成“脏数据”的后果,分布式并不是一个简单的调度算法就能轻易解决的,这是一种误解。如果进程全部是在一台机器上确实这么久好办,但是出于分布式的环境下该怎么解决呢?

给大家分析一下这个图,图中的三台机器,每个程序个跑一个应用程序,通过网络图将此连接起来,构成一个系统为用户提供服务,对用户来说这是个透明的架构的系统,我们可以把这个系统称之为分布式系统。

在分析一下这个分布式系统是如何对进程进行调度,假设在server1上挂载了一个资源,三个分布式的进程都要来竞争这个资源,但是又不希望他们同时访问,此时就需要一个“协调器”,让他们有序获取资源,“协调器”则被称为锁。比如“进程-1”说明程序在使用该资源时会先获取锁,“进程1”获取锁就会对资源独占,使用完将锁释放,让其他进程来获得锁。这个锁则是分布式锁,也是分布式协调技术。

分布式做的比较好的就是Google的Chubby和Apache的Zookeeper,Chubby是非开源的,后来雅虎模仿Chubby开发出了Zookeeper,也实现了类似的分布式功能,并把zookeeper作为开源程序捐给了Apache。Zookeeper用来构建我们的系统,不仅Bug少而且节约成本。

Zookeeper的优点是一种高可用、高性能且一直的开源协调工具。并且提供了“分布式锁服务”,功能强大,可以配置维护、组服务、分布式通知及分布式消息队列等。在性能方面它采用了Zab协议,数据结构用的Znode,在数据结构上定义了原语,通知机制用的Watcher机制,有严格的序列访问控制,不会因为一个节点的错误而崩溃。

(1)给Zookeeper起了俩主节点,主节点-A master-00001,主节点-B master-00002,启动后都像zookeeper注册一个节点,主节点-A变成了主节点,主节点-B变成了备用节点,对俩Master进程进行调度。

(2)主节点-A挂了,它注册的节点被自动删除,感知节点发起选举,经过选举后主节点-B变成了主节点,替代了主节点-A。

(3)Master恢复,它会在向zookeeper注册一个节点master-00003,再次选举后主节点-B依旧是主节点,主节点A变成了备用节点。

安装配置步骤:

试验机器:192.168.10.10     hostname:zk1

192.168.10.11    hostname:zk2

192.168.10.12     hostname:zk3

1.安装jdk

[^_^] ~# tar xf jdk-8u131-linux-x64.tar.gz -C /usr/local/

[^_^] ~# mkdir /usr/local/java

[^_^] java# mv jdk1.8.0_171 /usr/local/java

[^_^] ~# cat /etc/profile.d/java.sh

JAVA_HOME=/usr/local/java/jdk1.8.0_131

JRE_HOME=/usr/local/java/jdk1.8.0_131/jre

CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

export JAVA_HOME JRE_HOME CLASS_PATH

[^_^] ~# source /etc/profile.d/java.sh

验证:java -version

2.安装zookeeper

[^_^] ~# cat /etc/hosts

127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4

::1        localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.36.10  zk1

192.168.36.11  zk2

192.168.36.12  zk3

[^_^] ~# cat /etc/profile.d/zk.sh

#Set Zookeeper Environment

export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.11

export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

[^_^] ~# source /etc/profile.d/zk.sh

[^_^] ~#cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg

[^_^] ~#mkdir -p /usr/local/zookeeper/data/log

[^_^] ~#echo "1" > /usr/local/zookeeper/data/myid    #三台zookeeper的myid是不一样的

[^_^] ~# egrep -v "^$|#" /usr/local/zookeeper-3.4.11/conf/zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/tmp/zookeeper

dataLogDir=/tmp/zookeeper/log

clientPort=2181      #服务端口

server.1=zk1:2888:3888  #2888是follower连leader的端口,3888是选leader端口

server.2=zk2:2888:3888

server.3=zk3:2888:3888

[^_^] ~# cd /usr/local/zookeeper-3.4.11/bin/

[^_^] bin# ./zkServer.sh start  &

[^_^] bin#jps     #查看是否启动成功

1155 Jps

1093 QuorumPeerMain  #QuorumPeerMain是zookeeper进程

[^_^] bin# ./zkServer.sh status   #查节点状态

[^_^] bin#zkCli.sh -server zk1:2181,zk2:2181,zk3.:2181   #可以创建zk集群

分布式消息队列之kafka

...在磁盘上,并在群集内复制以防止数据丢失。Kafka构建在ZooKeeper同步服务之上。它与ApacheStorm和Spark非常好地集成,用于实时流式数据分析。Kafka的几个好处可靠性-Kaf 查看详情

消息队列之kafka从入门到小牛(代码片段)

...er扩展3.4Kafka核心之存储和容错机制3.5Kafka高效读写数据3.6Zookeeper在Kafka中的作用3.7Kafka事务一、Kafka介绍1.1消息队列的介绍在没有使用消息系统以前& 查看详情

zookeeper+kafka集群安装之二

zookeeper+kafka集群安装之二此为上一篇文章的续篇,kafka安装须要依赖zookeeper,本文与上一篇文章都是真正分布式安装配置,能够直接用于生产环境.zookeeper安装參考:http://blog.csdn.net/ubuntu64fan/article/details/26678877首先了解几个kafka中的概念... 查看详情

消息队列之kafka(ha)(代码片段)

1.kafka的HA(1)zookeeper在kafka中的作用:  -Zookeeper帮助kafka集群运行:存储一些元数据,还会帮助kafka集群进行管理(选主)  -存储关于消费者消费了哪些topic到那个进度的数据。 (2)kafkaHA解决的问题: &emsp... 查看详情

消息队列之kafka(集群搭建)(代码片段)

...)集群部署的基础环境准备: A:安装JDK1.8 A:安装zookeeper集群(也可以使用自带ZooKeeper,但是不推荐)(2)集体搭建: 版本:kafka_2.11-1.1.0 集群规划:hadoop01、hadoop02、hadoop03(三个节点)①解压安装包到对应的目录&e... 查看详情

六消息队列复习

...了,系统可用性降低。3消息队列的高可用?  kafka使用zookeeper,master/slave,保证高可用;  Kafka通过Zookeeper管理集群配置,选举leader,以及在ConsumerGroup发生变化时进行rebalance4如何保证消息不被重复消费(幂等性)?  k 查看详情

大型网站架构之分布式消息队列

大型网站架构之分布式消息队列转载2016年01月26日08:48:40标签:105329编辑删除大型网站架构之分布式消息队列 以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统... 查看详情

分布式消息队列kafka

下载地址:http://kafka.apache.org/downloads.html先启动zookeeper服务器bin/zookeeper-server-start.shconfig/zookeeper.properties&再启动kafka服务器bin/kafka-server-start.sh-daemonconfig/server.properties&创建topicbi 查看详情

大型网站架构之分布式消息队列

大型网站架构之分布式消息队列 以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。本次分享大纲消息队列概述消息队列应用场景消息中间件示例JMS消息服务... 查看详情

ipc之——消息队列

消息队列作用:  可以用于两个没有联系的进程间通信,创建一个消息队列类似于打开了一个文件,两个不同的进程都可以进行操作消息队列之函数介绍:头文件:<sys/type.h><sys/ipc.h><sys/msg.h>1.msgget(key_t,intmsgflg)://... 查看详情

物联网架构成长之路(27)-docker练习之zookeeper安装(代码片段)

...不细说了,具体的可以参考其他博客说明。不过Kafka依赖Zookeeper,因此先练习一些用Docker构建Zookeeper。 1.安装ZooKeeper  使用Kafka前,要安装ZooKeeper。这里利用最近刚学的Doc 查看详情

zookeeper集群和kafka的相关概念就部署(代码片段)

目录一、zookeeper概述1、zookeeper定义2、zookeeper工作机制3、zookeeper特点4、zookeeper数据结构5、zookeeper应用场景6、zookeeper选举机制第一次启动选举机制非第一次启动选举机制二、部署zookeeper集群1、安装前准备2、安装zookeeper三、消息... 查看详情

大型网站架构之分布式消息队列

以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。本次分享大纲消息队列概述消息队列应用场景消息中间件示例JMS消息服务(见第二篇:大型网站架构系列:分... 查看详情

systemvipc之消息队列(代码片段)

消息队列和共享内存、信号量一样,同属SystemVIPC通信机制。消息队列是一系列连续排列的消息,保存在内核中,通过消息队列的引用标识符来访问。使用消息队列的好处是对每个消息指定了特定消息类型,接收消息的进程可以... 查看详情

基于docker搭建分布式消息队列kafka

本文基于Docker搭建一套单节点的Kafka消息队列,Kafka依赖Zookeeper为其管理集群信息,虽然本例不涉及集群,但是该有的组件都还是会有,典型的kafka分布式架构如下图所示。本例搭建的示例包含Zookeeper+Kafka+Kafka-manger  #获取... 查看详情

消息队列技术之基本概念(转)

原文地址:消息队列技术之基本概念最近一直在总结AzureMessagingServiceBusMessaging相关的技术:消息顺序、消息持久化、复杂对象消息的序列化、消息事务、消息回执等机制。感觉有必要补充一篇消息队列技术的基本概念,无论Rabbit... 查看详情

zookeeper+kafka集群搭建详解(代码片段)

Kafka概述一、消息队列介绍1.1为什么需要消息队列(MO)1.2使用消息队列的好处1.3消息队列的两种模式二、Kafka相关介绍2.1Kafka定义2.2Kafka简介2.3Kafka的特性三、Kafka系统架构3.1Broker3.2Topic3.3Partition3.4Leader3.5Follower3.6Replica3.7Prod... 查看详情

自测之lesson11:消息和消息队列

题目:key及ftok函数的作用。 解答:key是用来创建消息队列的一个参数,当两个key相同时,创建消息队列会引起“误会”(除非有意为之)。所以我们可以通过ftok函数来获得一个“不易重复”的key。key对于进程间通信也有帮... 查看详情