Storm容错机制、Drpc、kafka集群搭建

本文详细介绍了Apache Storm的容错机制,包括Nimbus、ZooKeeper、Supervisor和Worker的角色及故障处理方式。同时,讲解了Drpc的分布式远程过程调用功能。此外,还提供了Kafka集群的搭建步骤,涵盖Zookeeper配置、Kafka服务器设置、启动流程及测试。
摘要由CSDN通过智能技术生成

Storm-容错机制、Drpc、kafka

Storm-容错机制

架构

​ Nimbus 分配任务、资源调度、上传jar包

​ ZooKeeper 代理协调、健康检查(心跳)

​ Supervisor 接收Nimbus任务、开启/关闭自己管理的worker进程(可以开启n个woker)

​ Worker 运行具体处理运算组件的进程(每个Worker对应执行一个Topology的子集)

​ 执行任务(可以执行n个task(spolt–推送数据/bolt–逻辑单元处理)任务)

​ 附:每个worker中有1-n个进程,一个进程可以执行1-n个task任务(spout,blot)

集群出现的问题以及解决办法

集群节点宕机 --物理问题

Nimbus

​ 在交付任务给ZK之后短时间内没有更多实质性任务,此时Nimbus可以闲置

​ 当Supervisor 和Nimbus同时宕机,此时Nimbus需要重启

​ 当客户端推送新任务时,Nimbus宕机,此时Nimbus需要重启

Supervisor

​ 当Supervisor宕机时,ZK会通知Nimbus,再重新将任务分配给其他Supervisor。当宕机的Supervisor恢复后,会心跳到ZK寻找自己之前的任务,如果任务被分配则执行快速自毁机制(杀死未完成原任务的进程),重新处于等待

Worker

​ 当Worker宕掉时,Supervisor先发现,并重新启动Worker,如果长时间启动不了,ZK会发现当前Worker宕掉,此时ZK会将宕掉的Worker任务交由其他Worker完成。当宕机的Worker恢复后,会执行快速自毁机制(杀死未完成原任务的进程),重新处于等待

进程挂掉

​ 当进程挂掉时,由ZK将该进程的任务重新分配新的进程

消息的完整性

​ 将包装的数据流做16位的二进制streamID,每发生stream流交互时将前后的ID进行异或运算,最终异或结果为0,则数据传递成功没有故障;若传递故障则推送给上一个节点重新发送。

tips: 与 全1为1,有0则0 要求严格

​ 或 有1为1,全0为0 要求不严

​ 异或 相异为1,相同为0

ack无法保证数据不被重复计算,但是可以保证数据至少被正确使用一次

Drpc

分布式远程过程调用 —DrpcServer在客户端和storm之间承担桥梁作用

​ 客户端通过DrpcServer将所需args发送给spout,再和bolt进行计算后,经过resultBolt汇总后将结果交由DrpcServer,最终由DrpcServer将结果展示给客户端

tops:DrpcServer与spout、resultBolt交互时都带有request-id用于分别不同客户端需求

定义DRPC拓扑:

方法1:

​ 通过LinearDRPCTopologyBuilder (该方法也过期,不建议使用)

​ 该方法会自动为我们设定Spout、将结果返回给DRPC Server等,我们只需要将Topology实现

方法2:

​ 直接通过普通的拓扑构造方法TopologyBuilder来创建DRPC拓扑

​ 需要手动设定好开始的DRPCSpout以及结束的ReturnResults

kafka

集群的分布式消息队列系统,遵循先进先出,数据有序原则

角色: Producers(生产者)、Broker(缓存代理)、Consumers(消费者)

​ storm处于消费者的地位

​ 在生产数据之前先创建topic,在topic下面生产数据,生产出同一个主题的东西可以根据实际的业务需求放到不同的partitions(分区)上,在同一个分区上生产和消费的顺序是有序的(依据偏移量)

​ 架构原理:Kafka给Producer和Consumer提供注册的接口,数据从Producer发送到Broker,Broker承担一个中间缓存和分发的作用,负责分发注册到系统中的Consumer。

​ 一个分区属于一个broker,broker是分区的master

​ ZK管理Broker

kafka集群搭建

集群规划:

Zookeeper集群共三台服务器,分别为:node1、node2、node3。

Kafka集群共三台服务器,分别为:node1、node2、node3。

1、Zookeeper集群准备

​ kafka是一个分布式消息队列,需要依赖ZooKeeper,请先安装好zk集群。

​ Zookeeper集群安装步骤略。

2、安装Kafka

​ 下载压缩包(官网地址:http://kafka.apache.org/downloads.html

​ 解压:

​ tar zxvf kafka_2.10-0.9.0.1.tgz -C /opt/

​ mv kafka_2.10-0.9.0.1/ kafka

修改配置文件:config/server.properties

[外链图片转存失败(img-5Frb3INj-1563925076034)(file:///C:/Users/86158/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)]

[外链图片转存失败(img-be1mhZ15-1563925076035)(file:///C:/Users/86158/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png)]

核心配置参数说明:

broker.id: broker集群中唯一标识id,0、1、2、3依次增长(broker即Kafka集群中的一台服务器)

注:当前Kafka集群共三台节点,分别为:node1、node2、node3。对应的broker.id分别为0、1、2。

zookeeper.connect: zk集群地址列表

将当前node1服务器上的Kafka目录复制到其他node2、node3服务器上:

​ scp -r /opt/kafka/ node2:/opt

​ scp -r /opt/kafka/ node3:/opt

修改node2、node3上Kafka配置文件中的broker.id(分别在node2、3服务器上执行以下命令修改broker.id

​ sed -i -e ‘s/broker.id=.*/broker.id=1/’ /opt/kafka/config/server.properties

​ sed -i -e ‘s/broker.id=.*/broker.id=2/’ /opt/kafka/config/server.properties

3、启动Kafka集群

​ A、启动Zookeeper集群。

​ B、启动Kafka集群。

分别在三台服务器上执行以下命令启动:

​ bin/kafka-server-start.sh config/server.properties

4、测试

创建话题(kafka-topics.sh --help查看帮助手册)

创建topic:

​ bin/kafka-topics.sh --zookeeper sxt002:2181,sxt003:2181,sxt004:2181 --create --replication-factor 2 --partitions 3 --topic test

(参数说明:

–replication-factor*:指定每个分区的复制因子个数,默认1个*

–partitions*:指定当前创建的kafka分区数量,默认为1个*

–topic*:指定新建topic的名称)*

查看topic列表:

​ bin/kafka-topics.sh --zookeeper node4:2181,node2:2181,node3:2181 --list

查看“test”topic描述:

bin/kafka-topics.sh --zookeeper node4:2181,node2:2181,node3:2181 --describe --topic test

[外链图片转存失败(img-eGtcEHLD-1563925076035)(file:///C:/Users/86158/AppData/Local/Temp/msohtmlclip1/01/clip_image006.png)]

创建生产者:

​ bin/kafka-console-producer.sh --broker-list sxt002:9092,sxt003:9092,sxt004:9092 --topic test2

创建消费者:

​ bin/kafka-console-consumer.sh --zookeeper node4:2181,node2:2181,node3:2181 --from-beginning --topic test

查看帮助手册:

​ bin/kafka-console-consumer.sh help

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值