Flink Native Kubernetes实战,索引为什么能提供查询性能

关于Flink Native Kubernetes

  1. 先对比官方的1.9和1.10版本文档,如下图和红框和蓝框所示,可见Flink Native Kubernetes是1.10版本才有的新功能:
  1. 看看Native Kubernetes是如何运行的,如下图,创建session cluster的命令来自Flink安装包:
  1. 更有趣的是,提交任务的命令也来自Flink安装包,就是我们平时提交任务用到flink run命令,如下图:
  1. 结合官方给出的提交和部署流程图就更清晰了:kubernetes上部署了Flink Master,由Flink Client来提交session cluster和job的请求:

Flink Kubernetes和Flink Native Kubernetes的区别

至此,可以小结Flink Kubernetes和Flink Native Kubernetes的区别:

  1. Flink Kubernetes自1.2版本首次出现,Flink Native Kubernetes自1.10版本首次出现;

  2. Flink Kubernetes是把JobManager和TaskManager等进程放入容器,在kubernetes管理和运行,这和我们把java应用做成docker镜像再在kubernetes运行是一个道理,都是用kubectl在kubernetes上操作;

  3. Flink Native Kubernetes是在Flink安装包中有个工具,此工具可以向kubernetes的Api Server发送请求,例如创建Flink Master,并且可以和Flink Master通讯,用于提交任务,我们只要用好Flink安装包中的工具即可,无需在kubernetes上执行kubectl操作;

Flink Native Kubernetes在Flink-1.10版本中的不足之处

  1. Flink Native Kubernetes只是Beta版,属于实验性质(官方原话:still experimental),请勿用于生产环境!

  2. 只支持session cluster模式(一个常驻session执行多个任务),还不支持Job clusters模式(一个任务对应一个session)

尽管还没有进入Release阶段,但这种操作模式对不熟悉kubernetes的开发者来说还是很友好的,接下来通过实战来体验吧;

官方要求

为了体验Native Kubernetes,flink官方提出了下列前提条件:

  1. kubernetes版本不低于1.9

  2. kubernetes环境的DNS是正常的

  3. KubeConfig文件,并且这个文件是有权对pod和service资源做增删改查的(kubectl命令有权对pod和service做操作,也是因为它使用了对应的KubeConfig文件),这个文件一般在kubernetes环境上,全路径:~/.kube/config

  4. pod执行时候的身份是service account,这个service account已经通过RBAC赋予了pod的增加和删除权限;

前面两点需要您自己保证已达到要求,第三和第四点现在先不必关心,后面有详细的步骤来完成;

实战环境信息

本次实战的环境如下图所示,一套kubernetes环境(版本是1.15.3),另外还有一台CentOS7电脑,上面已部署了flink-1.10(这里的部署是说把安装包解压,不启动任何服务):

准备完毕,开始实战了~

实战内容简介

本次实战是在kubernetes环境创建一个session cluster,然后提交任务到这个sessionc cluster运行,与官方教程不同的是本次实战使用自定义namespace和service account,毕竟生产环境一般是不允许使用default作为namespace和service account的;

实战

  1. 在CetnOS7电脑上操作时使用的是root账号;

  2. 在kubernetes的节点上,确保有权执行kubectl命令对pod和service进行增删改查,将文件/.kube/config复制到CentOS7电脑的/.kube/目录下;

  3. 在kubernetes的节点上,执行以下命令创建名为flink-session-cluster的namespace:

kubectl create namespace flink-session-cluster

  1. 执行以下命令创建名为flink的serviceaccount:

kubectl create serviceaccount flink -n flink-session-cluster

  1. 执行以下命令做serviceaccount和角色的绑定:

kubectl create clusterrolebinding flink-role-binding-flink \

–clusterrole=edit \

–serviceaccount=flink-session-cluster:flink

  1. SSH登录部署了flink的CentOS7电脑,在flink目录下执行以下命令,即可创建名为session001的session cluster,其中-Dkubernetes.namespace参数指定了namespace,另外还指定了一个TaskManager实例使用一个CPU资源、4G内存、内含6个slot:

./bin/kubernetes-session.sh \

-Dkubernetes.namespace=flink-session-cluster \

-Dkubernetes.jobmanager.service-account=flink \

-Dkubernetes.cluster-id=session001 \

-Dtaskmanager.memory.process.size=8192m \

-Dkubernetes.taskmanager.cpu=1 \

-Dtaskmanager.numberOfTaskSlots=4 \

-Dresourcemanager.taskmanager-timeout=3600000

  1. 如下图,控制台提示创建成功,并且红框中提示了flink web UI的访问地址是http://192.168.50.135:31753:
  1. 下载镜像和启动容器需要一定的时间,可以用kubectl get和kubectl describe命令观察对应的deployment和pod的状态:

9. pod启动成功后访问flink web,如下图,此时还没有创建TaskManager,因此Slot为零:

10. 回到CentOS7电脑,在flink目录下执行以下命令,将官方自带的WindowJoin任务提交到session cluster:

./bin/flink run -d \

-e kubernetes-session \

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)

最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们:

目录:

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

Java面试核心知识点

最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们:

目录:

[外链图片转存中…(img-1nBUZ6iE-1711392449694)]

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

[外链图片转存中…(img-WhnnWzTD-1711392449694)]

Java面试核心知识点

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录