摘要:本文详细讲解如何将Dinky 1.2.1与Flink 1.18.1无缝集成,并部署到Kubernetes集群中。通过解决资源配置、服务发现等核心问题,帮助读者构建高可用的实时计算平台。文章内容涵盖环境准备、镜像构建、Kubernetes资源配置、授权管理及常见问题排查,适合有一定Kubernetes和Flink基础的开发者。
一、为什么选择Dinky + Flink on Kubernetes?
- 1. Dinky:Flink生态的SQL开发利器
Dinky是一个开源的Flink SQL开发平台,支持作业管理、血缘分析、实时监控等功能,能够显著提升Flink作业的开发效率和管理能力。
2. Flink 1.18:原生Kubernetes集成
Flink 1.18版本增强了对Kubernetes的原生支持,提供了更高效的资源调度和弹性扩缩容能力,适合大规模实时计算场景。
3. Kubernetes部署的优势
-
自动扩缩容:根据负载动态调整资源。
-
故障恢复:自动重启失败的Pod,保障服务高可用。
-
资源隔离:通过Namespace和Resource Quota实现资源隔离,避免资源争用。
-
二、环境准备
-
Kubernetes集群(Minikube或生产集群,版本≥1.20)
-
Docker & 镜像仓库(私有Harbor或Docker Hub)
-
持久化存储(NFS或CSI驱动)
-
配置NFS或CSI驱动,确保Dinky和Flink的配置文件、日志等数据能够持久化存储。
-
创建PersistentVolume(PV)和PersistentVolumeClaim(PVC),供Deployment使用。
三、部署步骤详解
1. 构建Dinky自定义镜像
Dinky的镜像需要基于Flink 1.18.1构建,以下是详细的Dockerfile示例:
ARG FLINK_VERSION=1.18.1
FROM flink:${FLINK_VERSION}-scala_2.12-java8
ENV FLINK_HOME=/opt/flink
RUN rm -f /opt/flink/lib/flink-table-planner-loader*.jar && cp /opt/flink/opt/flink-table-planner*.jar /opt/flink/lib/ 2>/dev/null || : && ln -s /opt/flink/lib/* /opt/dinky/extends/flink1.18/
ENV DINKY_HOME=/opt/dinky/
USER root
WORKDIR /opt/dinky/
#下载dink jar并解压到与DokerFile 同级目录下
COPY dinky-release-1.18-1.2.1 /opt/dinky
#需要mysql 驱动
COPY mysql-connector-java-8.0.28.jar /opt/dinky/extends/
WORKDIR /opt/dinky
COPY flink-shaded-hadoop-2