实时数仓、基于Flink1.11的SQL构建实时数仓 之 zookeeper集群搭建

本文档详细介绍了如何在Linux环境下安装Zookeeper 3.6.2集群,包括环境规划、JDK配置、防火墙关闭、配置免密登录、集群安装步骤以及创建群起脚本。每个节点需要设置dataDir,创建myid文件,并通过zkServer.sh启动服务。最后提供了一个批量执行脚本来简化操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zookeeper-3.6.2集群安装

目录

zookeeper-3.6.2集群安装

集群规划:

jdk1.8 配置环境变量

关闭防火墙:

配置免密:所有主机都执行

安装步骤:

1. 下载zookeeper

2. 安装并配置Zookeeper

3 群起脚本


集群规划:

详见上一篇博客:实时数仓、基于Flink1.11的SQL构建实时数仓  中环境说明

jdk1.8 配置环境变量

vi /etc/profile

export JAVA_HOME=/opt/software/jdk1.8.0_261

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

关闭防火墙:

systemctl stop firewalld

systemctl disable firewalld

 

配置免密:所有主机都执行

ssh-keygen -t rsa

ssh-copy-id root@m1

ssh-copy-id root@m2

ssh-copy-id root@s1

ssh-copy-id root@s2

ssh-copy-id root@s3

安装步骤:

1. 下载zookeeper

Zookeeper下载地址:http://mirror.bit.edu.cn/apache/zookeeper/

2. 安装并配置Zookeeper

2.1 安装zookeeper

安装目录:/opt/hadoop/apache-zookeeper-3.6.2-bin

tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz

2.2 配置zookeeper集群 

进入配置文件目录 :cd /opt/hadoop/apache-zookeeper-3.6.2-bin/conf

复制配置文件模板 :cp zoo_sample.cfg zoo.cfg

编辑:vim zoo.cfg

#将文件下添加如下内容

tickTime=2000

#zk的存放数据的目录,可以指定在zk的home目录下创建一个data目录

dataDir=/opt/data/zookeeper

#客户端访问端口

clientPort=2181

initLimit=5

syncLimit=2

#server.id=ip:port:port,id应该与data/下的myid中的内容保持一致

server.1=s1:2888:3888

server.2=s2:2888:3888

server.3=s3:2888:3888

2.3 分发zookeeper的目录到其它节点

scp -r  /opt/hadoop/apache-zookeeper-3.6.2-bin root@s2: /opt/hadoop/

scp -r  /opt/hadoop/apache-zookeeper-3.6.2-bin root@s3: /opt/hadoop/

2.4 在各个节点上分别创建data目录,创建myid文件

# s1

cd /opt/data/zookeeper

mkdir data

cd data/

touch myid

echo 1 > myid

-------------

# s2

cd /opt/data/zookeeper

mkdir data

cd data/

touch myid

echo 2 > myid

--------------

# s3

cd /opt/data/zookeeper

mkdir data

cd data/

touch myid

echo 3 > myid

 

2.5 分别在不同节点上启动zkServer.sh start

分别在s1 s2 s3上启动 zkServer.sh start /status/stop

/opt/hadoop/apache-zookeeper-3.6.2-bin/bin/zkServer.sh start

3 群起脚本

分享一个批量执行的小脚本:如下创建脚本:/home/ctl/zookeeperctl    

[root@m1 ctl]# cat /home/ctl/zookeeperctl 
#!/bin/sh
workPath=$(dirname $0)
doCommand()
{
        hosts=`sed -n '/^[^#]/p' /home/ctl/zookeeperhostlist`
        for host in $hosts
            do
                echo ""
                echo HOST $host
                ssh $host "$@"
            done
        return 0
}
         
        if [ $# -lt 1 ]
        then
                echo "$0 cmd"
                exit
        fi
        doCommand "$@"
        echo "return from doCommand"
配置文件:/home/ctl/zookeeperhostlist 

[root@m1 ctl]# cat /home/ctl/zookeeperhostlist 
s1
s2
s3

使用方法:

将路径/home/ctl 添加到环境变量中:export PATH=$PATH:/home/ctl

批量启动:zookeeperctl "/opt/hadoop/apache-zookeeper-3.6.2-bin/bin/zkServer.sh start"

 

<think>好的,用户让我介绍一下Flink的基本架构。首先,我需要回忆一下Flink的相关知识,确保自己理解正确。Flink是一个分布式流处理框架,所以架构部分应该涉及到它的组件和它们之间的协作。 首先,用户可能对大数据处理框架有一定了解,但可能不太清楚Flink的具体结构。我应该从基础开始,分层次介绍。Flink的架构主要分为哪几部分呢?记得有客户端、JobManager、TaskManager这些组件。 接下来要确认这些组件的职责。JobManager负责协调任务调度和资源管理,而TaskManager则是实际执行任务的工作节点。客户端的作用是提交作业,可能包括命令行或者API的方式。另外,还需要提到资源调度层,比如Flink可以集成YARN或Kubernetes,这可能对用户部署环境有帮助。 用户可能还想知道各个组件之间如何通信,比如JobManager和TaskManager之间的任务分配和状态汇报。这里需要解释清楚它们的分工协作,比如JobManager生成执行图,拆分成Task,分配到TaskManager的Slot上执行。 另外,Flink的API分层结构也很重要,比如最底层的ProcessFunction,中间层的DataStream/DataSet API,以及顶层的SQL和Table API。用户可能有不同的开发需求,了解这些分层可以帮助他们选择合适的API。 需要注意用户是否关心高可用性或者容错机制。虽然问题没有直接提到,但架构中的JobManager高可用和Checkpoint机制是Flink的重要特性,应该简要提及,以展示架构的可靠性。 用户可能还希望了解架构中的并行处理,比如TaskManager的Slot和并行度设置,这对性能调优很关键。需要解释Slot是资源调度的单位,以及如何通过调整并行度来优化任务执行。 需要确保语言简洁,结构清晰,避免使用过多专业术语,或者适当解释术语。比如“有状态流处理”可能需要简单说明,以帮助理解架构设计的优势。 最后,检查是否有遗漏的部分,比如部署模式(Session、Per-Job、Application模式),这些不同的部署方式如何影响架构的运作。可能用户在实际部署时会遇到选择哪种模式的问题,所以简要提及可以增加回答的实用性。 总结一下,回答的结构应该是先总述Flink架构,然后分组件详细说明,接着介绍API分层,最后补充关键特性。这样用户能够逐步了解各个部分,建立整体的架构图景。同时,注意使用中文,避免技术术语的直译,确保表达自然易懂。</think>Flink 的基本架构采用分层设计,核心组件协同工作以实现高效的分布式流处理。以下是逐步分解的架构介绍: --- ### 一、核心组件层 #### 1. **客户端 (Client)** - **作用**:提交作业到集群(通过 `flink run` 命令或编程 API)。 - **流程**: 1. 解析用户代码生成**逻辑数据流图 (Logical Dataflow Graph)**。 2. 优化后转换为**作业图 (JobGraph)**,提交给 JobManager。 #### 2. **JobManager** - **角色**:集群的“大脑”,负责作业调度和资源协调。 - **关键功能**: - **作业调度**:将 JobGraph 转换为**执行图 (ExecutionGraph)**,拆分为可并行执行的 **Task**。 - **Checkpoint 协调**:定期触发检查点(快照),保障容错。 - **故障恢复**:通过 Checkpoint 自动恢复任务状态。 - **高可用模式**:依赖 ZooKeeper 实现 Leader 选举和元数据存储。 #### 3. **TaskManager** - **角色**:实际执行任务的“工作节点”。 - **核心机制**: - **Slot 分配**:每个 TaskManager 提供多个 **Slot**(资源单元),用于运行 Task。 - **数据交换**:通过网络、内存或磁盘进行 Task 间的数据传输(如 Shuffle)。 - **状态管理**:本地存储任务状态(如 RocksDB 状态后端)。 --- ### 二、资源调度层 Flink 支持多种资源管理器: - **Standalone 模式**:内置资源管理。 - **YARN**:与 Hadoop 生态集成。 - **Kubernetes**:容器化部署。 - **Mesos**(已逐步淘汰)。 --- ### 三、运行时架构 #### 1. **任务执行模型** - **Task**:最小执行单元,对应一个算子链(Operator Chain)。 - **并行度 (Parallelism)**:单个算子可拆分为多个并行子任务。 - **数据分区**:按 Key 分组(KeyBy)或轮询(Rebalance)分配数据。 #### 2. **网络栈** - **流水线式数据传输**:实现低延迟(无需落盘)。 - **反压机制 (Backpressure)**:动态调整数据流速,防止下游过载。 --- ### 四、API 分层 #### 1. **底层 API** - **ProcessFunction**:直接操作状态与时间(灵活但复杂)。 #### 2. **核心 API** - **DataStream API**:用于流处理(如 `map`, `filter`, `window`)。 - **DataSet API**:用于批处理(逐步被批流一体取代)。 #### 3. **高层 API** - **SQL & Table API**:声明式编程,支持批流统一语法。 ```sql SELECT window_start, COUNT(*) FROM TABLE(TUMBLE(TABLE clicks, DESCRIPTOR(ts), INTERVAL '1' HOUR)) GROUP BY window_start; ``` --- ### 五、关键特性 1. **事件时间处理**:支持 `Event Time`、`Processing Time` 和 `Ingestion Time`。 2. **状态一致性**:精确一次(Exactly-Once)语义保障。 3. **批流一体**:同一套引擎处理有界(批)和无界(流)数据。 --- ### 六、部署模式 | 模式 | 特点 | |-----------------|-------------------------------------| | **Session 模式** | 共享集群资源,适合短时作业(资源利用率高,但隔离性差)。 | | **Per-Job 模式** | 独占集群资源,适合生产环境(资源隔离性强)。 | | **Application 模式** | 作业与集群生命周期绑定,简化依赖管理(Flink 1.11+)。 | --- ### 总结 Flink 架构通过 JobManager 和 TaskManager 的协同调度,结合分层 API 和灵活的部署选项,实现了低延迟、高吞吐的流处理能力。其核心优势在于状态管理和批流一体的设计,适合复杂事件处理与实时分析场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值