ARCHITECTURE:Hadoop之Zookeeper,Kafka集群

Zookeeper

  • Zookeeper是一个开源的分布式应用程序协调服务
  • Zookeeper是用来保证数据在集群间的事务一致性
  • Zookeeper应用场景
    – 集群分布式锁
    – 集群统一命名服务
    – 分布式协调服务
    官网文档:http://zookeeper.apache.org/

角色

  • Leader : 接受所有的Follower的提案请求并统一协调发起提案的投票,负责与所有的Follower进行内部数据交换
  • Follower : 直接为客户端服务并参与提案的投票,同时与leader进行数据交换
  • Observer : 直接为客户端服务但并不参与提案的投票,同时也与Leader进行数据交换 ,

选举

  • 服务的启动的时候是没有角色的(LOOKING)
  • 角色是通过选举产生的
  • 选举产生一个Leader,剩下的是Follower
  • 选举原则
    – 集群中超过半数机器投票选择Leader
    – 假如集群中拥有n台服务器,那么Leader必须得到n/2+1台服务器的投票(服务器台数最好是奇数)
  • 如果Leader死亡,重新选举Leader
  • 如果死亡的机器数量达到一半,则集群挂掉
  • 如果无法得到足够的投票数量,就重新发起投票,如果参与投票的机器不足n/2+1.则集群通知工作
  • 如果Follower死亡过多,剩余机器不足n/2+1,则集群也会停止工作
  • Observer不计算在投票总设备数量里面

Zookeeper原理与设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Zookeeper安装

安装Zookeeper

编辑/etc/hosts ,所有集群主机可以相互 ping 通(在hadoop01上面配置,同步到node1,node2,node3)

vim /etc/hosts
192.168.1.60  hadoop01
192.168.1.61  node1
192.168.1.62  node2
192.168.1.63  node3

for i in {62..64}  
do    
scp /etc/hosts 192.168.1.$i:/etc/  
done        //同步配置
hosts       100%  253   639.2KB/s   00:00    
hosts       100%  253   497.7KB/s   00:00    
hosts       100%  253   662.2KB/s   00:00  

所有主机安装 java-1.8.0-openjdk-devel
zookeeper 解压拷贝到 /usr/local/zookeeper

tar -xf zookeeper-3.4.13.tar.gz 
mv zookeeper-3.4.13 /usr/local/zookeeper

配置文件改名,并在最后添加配置

cd /usr/local/zookeeper/conf/
ls
configuration.xsl  log4j.properties  zoo_sample.cfg
cp zoo_sample.cfg  zoo.cfg
chown root.root zoo.cfg
vim zoo.cfg
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
server.4=nn01:2888:3888:observer

拷贝 /usr/local/zookeeper 到其他集群主机

for i in node{1..3}
do
rsync -aXSH --delete /usr/local/zookeeper $i:/usr/local/ &
done

所有主机创建 mkdir /tmp/zookeeper
创建 myid 文件,id 必须与配置文件里主机名对应的 server.(id) 一致

echo 4 >/tmp/zookeeper/myid
ssh node1 'echo 1 >/tmp/zookeeper/myid'
ssh node2 'echo 2 >/tmp/zookeeper/myid'
ssh node3 'echo 3 >/tmp/zookeeper/myid'

启动服务,单启动一台无法查看状态,需要启动全部集群以后才能查看状态,每一台上面都要手工启动

/usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

注意:刚启动zookeeper查看状态的时候报错,启动的数量要保证半数以上,这时再去看就成功了
查看状态

/usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: observe

/usr/local/zookeeper/bin/zkServer.sh stop  
#关闭之后查看状态其他服务器的角色
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

yum -y install telnet
telnet node3 2181 
Trying 192.168.1.24...
Connected to node3.
Escape character is '^]'.
ruok    #发送
imokConnection closed by foreign host.        #imok回应的结果

利用 api 查看状态hadoop01上操作

/usr/local/zookeeper/bin/zkServer.sh start
vim api.sh
#!/bin/bash
function getstatus(){
    exec 9<>/dev/tcp/$1/2181 2>/dev/null
    echo stat >&9
    MODE=$(cat <&9 |grep -Po "(?<=Mode:).*")
    exec 9<&-
    echo ${MODE:-NULL}
}
for i in node{1..3} nn01;do
    echo -ne "${i}\t"
    getstatus ${i}
done
chmod 755 api.sh
./api.sh 
node1    follower
node2    leader
node3    follower 
hadoop01    observer

Kafka集群

  • Kafka是什么
    – Kafka是由LinkedIn开发的一个分布式的消息系统
    – Kafka是使用的Scala编写
    – Kafka是一种消息中间件
  • 为什么使用Kafka
    – 解耦,冗余,提高扩展性,缓冲
    – 保证顺序,灵活,削峰填谷
    – 异步通信
  • Kafka角色与集群结构
    – producer : 生产者,负责发布消息
    – consumer : 消费者,负责读取处理消息
    – topic : 消息的类别
    – Parition : 每个Topic包括一个或多个partition
    – Broker : Kafka集群包括一个或多个服务器
  • Kafka通过Zookeeper管理集群配置,选举Leader
    在这里插入图片描述
  • Kafka集群的安装配置
    – Kafka集群的安装配置依赖Zookeeper,搭建Kafka集群之前,请先创建好一个可用的Zookeeper集群
    – 安装Openjdk运行环境
    – 同步Kafka拷贝到所有集群主机
    – 修改配置文件
    – 启动与验证

解压 kafka 压缩包
Kafka在node1,node2,node3上面操作即可

tar -xf kafka_2.12-2.1.0.tgz

把 kafka 拷贝到 /usr/local/kafka 下面

mv kafka_2.12-2.1.0 /usr/local/kafka

修改配置文件 /usr/local/kafka/config/server.properties

cd /usr/local/kafka/config
vim server.properties
broker.id=22
zookeeper.connect=node1:2181,node2:2181,node3:2181

拷贝 kafka 到其他主机,并修改 broker.id ,不能重复

for i in node{2..3}
do 
rsync -aXSH --delete /usr/local/kafka $i:/usr/local/
done

vim /usr/local/kafka/config/server.properties        
#node2主机修改
broker.id=23
vim /usr/local/kafka/config/server.properties        
#node3主机修改
broker.id=24

启动 kafka 集群(node1,node2,node3启动)

/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties 
jps  #出现kafka
26483 DataNode
27859 Jps
27833 Kafka
26895 QuorumPeerMain

验证配置,node1创建一个 topic

/usr/local/kafka/bin/kafka-topics.sh --create --partitions 1 --replication-factor 1 --zookeeper node3:2181 --topic aa    
Created topic "aa".

模拟生产者,node2发布消息

/usr/local/kafka/bin/kafka-console-producer.sh \
--broker-list node2:9092 --topic aa        #写一个数据
ccc
ddd

模拟消费者,node3接收消息

/usr/local/kafka/bin/kafka-console-consumer.sh \ 
--bootstrap-server node1:9092 --topic aa        #这边会直接同步
ccc
ddd

注意:kafka比较吃内存

发布了33 篇原创文章 · 获赞 10 · 访问量 930
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览