面对交互式SQL的云原生流式引擎实现:k8s Flink集群对接kafka与clickHouse一体化方案

📅 2026/7/6 14:47:19
面对交互式SQL的云原生流式引擎实现:k8s Flink集群对接kafka与clickHouse一体化方案
1、SQL Gateway核心实现远离与部署前提:我将集群中一台10.30.2.57服务器作为NFS服务器(/mnt/data/flink-data为共享目录),其他的是NFS客户端1.1、pv.test.yaml文件完整如下最常用的语句kubectl delete -f flink_test_copy.yaml -n test #删除服务kubectl apply -f flink_test_copy.yaml -n test #创建服务kubectl exec -it deployment/flink-jobmanager -n test -- bash #进入jobmanager容器./bin/sql-client.sh -Dlog.level=INFO #启动flink sqlapiVersion: v1 kind: PersistentVolume metadata: name: flink-data-pv spec: capacity: storage: 20Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain mountOptions: - nfsvers=3 - tcp nfs: server: 10.30.2.57 path: /mnt/data/flink-data --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: flink-data-pvc namespace: test spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi1.2、flink_test.yaml文件完整如下# ====================== JobManager Deployment ====================== apiVersion: apps/v1 kind: Deployment metadata: name: flink-jobmanager namespace: test spec: replicas: 1 selector: matchLabels: app: flink component: jobmanager template: metadata: labels: app: flink component: jobmanager spec: securityContext: runAsUser: 0 runAsGroup: 0 fsGroup: 0 containers: - name: jobmanager image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/flink:1.19.1-java8 imagePullPolicy: IfNotPresent lifecycle: postStart: exec: command: - /bin/bash - -c - | cp -r /opt/flink/usrlib/* /opt/flink/lib/ chown -R flink:flink /opt/flink/lib/ args: ["jobmanager"] ports: - containerPort: 6123 name: rpc - containerPort: 6124 name: blob - containerPort: 8081 name: ui env: - name: JOB_MANAGER_RPC_ADDRESS value: flink-jobmanager - name: FLINK_PROPERTIES value: | jobmanager.memory.process.size: 1g jobmanager.memory.jvm-overhead.max: 256m state.backend: filesystem state.checkpoints.dir: file:///mnt/data/flink-data cluster.evenly-spread-out-slots: true volumeMounts: - name: flink-storage mountPath: /opt/flink/usrlib subPath: usrlib # 补充:JobManager也需要挂载checkpoint目录(和TM统一) - name: flink-storage mountPath: /mnt/data/flink-data subPath: data volumes: - name: flink-storage persistentVolumeClaim: claimName: flink-data-pvc --- # JobManager Service apiVersion: v1 kind: Service metadata: name: flink-jobmanager namespace: test spec: ports: - name: rpc port: 6123 - name: blob port: 6124 - name: ui port: 8081 selector: app: flink component: jobmanager type: ClusterIP --- # ====================== TaskManager Deployment ====================== apiVersion: apps/v1 kind: Deployment metadata: name: flink-taskmanager namespace: test spec: replicas: 3 selector: matchLabels: app: flink component: taskmanager template: metadata: labels: app: flink component: taskmanager spec: securityContext: runAsUser: 0 runAsGroup: 0 fsGroup: 0 containers: - name: taskmanager image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/flink:1.19.1-java8 imagePullPolicy: IfNotPresent lifecycle: postStart: exec: command: - /bin/bash - -c - | cp -r /opt/flink/usrlib/* /opt/flink/lib/ chown -R flink:flink /opt/flink/lib/ args: ["taskmanager"] ports: - containerPort: 6121 name: data - containerPort: 6122 name: rpc - containerPort: 6666 name: http1 - containerPort: 6667 name: http2 - containerPort: 6668 name: http3 - containerPort: 6669 name: http4 - containerPort: 6670 name: http5 - containerPort: 6671 name: http6 - containerPort: 6672 name: http7 - containerPort: 8400 name: http-8400 - containerPort: 8401 name: http-8401 - containerPort: 8402 name: http-8402 - containerPort: 8403 name: http-8403 - containerPort: 8404 name: http-8404 env: - name: JOB_MANAGER_RPC_ADDRESS value: flink-jobmanager - name: FLINK_PROPERTIES value: | taskmanager.bind-host: 0.0.0.0 taskmanager.numberOfTaskSlots: 16 taskmanager.memory.process.size: 1024m taskmanager.memory.heap.size: 512m taskmanager.memory.off-heap.size: 256m taskmanager.memory.managed.size: 256m taskmanager.memory.jvm-metaspace.size: 128m taskmanager.memory.jvm-overhead.min: 64m taskmanager.memory.jvm-overhead.max: 128m cluster.evenly-spread-out-slots: true volumeMounts: # 原有checkpoint存储 - name: flink-storage mountPath: /mnt/data/flink-data subPath: data # ========== TM新增挂载usrlib,和JM一致 ========== - name: flink-storage mountPath: /opt/flink/usrlib