**Flink基本概念及用途自行百度或者阅读官网文档,本系列旨在快速学习搭建flink开发环境,只提供个人理解说明**🦍 官网文档地址:https://flink.apache.org/
Flink用途
官网概述:Apache Flink 功能强大,支持开发和运行多种不同种类的应用程序。它的主要特性包括:批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。Flink 不仅可以运行在包括 YARN、 Mesos、Kubernetes 在内的多种资源管理框架上,还支持在裸机集群上独立部署。在启用高可用选项的情况下,它不存在单点失效问题。事实证明,Flink 已经可以扩展到数千核心,其状态可以达到 TB 级别,且仍能保持高吞吐、低延迟的特性。世界各地有很多要求严苛的流处理应用都运行在 Flink 之上。
注意
本文的场景简单设定为:Oracle数据存储业务数据,Mysql为实时报表展示系统,这里通过FLink cdc实现oracle数据以毫秒、秒级别的延迟进行数据ETL。
说白了就是可集成在各种架构里面的一个大数据处理框架,并且支持批处理或者流处理,抑或批处理加流处理。而且Flink最大的优势也是在流处理上(高吞吐、低延迟、高性能)
k8s 作为云原生时代的操作系统,学习它的必要性不言而喻,如果你遇到了任何问题,可以在 Discussions 中评论或者 Issue 中提出,如果你觉得这个仓库对你有价值,欢迎 star 或者提 PR / Issue,让它变得更好!
在学习本教程前,需要注意本教程侧重于实战引导,以渐进式修改代码的方式,将从最基础的 container 容器的定义开始,经过 pod
, deployment
, service
, ingress
, configmap
, secret
等资源直到用 helm
来打包部署一套完整服务。所以如果你对容器和 k8s 的基础理论知识不甚了解的话,建议先从 官网文档 或者其它教程获取基础理论知识,再通过实战加深对知识的掌握!
这里是文档的索引:
下面是所有文档的集合:
在开始本教程之前,需要配置好本地环境,以下是需要安装的依赖和包。
首先我们需要安装 docker
来打包镜像,如果你本地已经安装了 docker
,那么你可以选择跳过这一小节。
目前使用 Docker Desktop 来安装 docker 还是最简单的方案,打开官网下载对应你电脑操作系统的包即可 (https://www.docker.com/products/docker-desktop/),
当安装完成后,可以通过 docker run hello-world
来快速校验是否安装成功!
目前 Docker 公司宣布 Docker Desktop 只对个人开发者或者小型团体免费 (2021年起对大型公司不再免费),所以如果你不能通过 Docker Desktop 的方式下载安装 docker
,可以参考 这篇文章 只安装 Docker CLI。
我们还需要搭建一套 k8s 本地集群 (使用云厂商或者其它 k8s 集群都可) 。本地搭建 k8s 集群的方式推荐使用 minikube。
可以根据 minikube 快速安装 来进行下载安装,这里简单列举 MacOS 的安装方式,Linux & Windows 操作系统可以参考官方文档 快速安装。
shellbrew install minikube
我们的旅程从一段代码开始。新建一个 main.go
文件,复制下面的代码到文件中。
gopackage main
import (
"io"
"net/http"
)
func hello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "[v1] Hello, Kubernetes!")
}
func main() {
http.HandleFunc("/", hello)
http.ListenAndServe(":3000", nil)
}
上面是一串用 Go 写的代码,代码逻辑非常的简单,首先启动 HTTP 服务器,监听 3000
端口,当访问路由 /
的时候 返回字符串 [v1] Hello, Kubernetes!
。
如果在生产环境中运行的都是独立的单体服务,那么 Container (容器) 也就够用了,但是在实际的生产环境中,维护着大规模的集群和各种不同的服务,服务之间往往存在着各种各样的关系。而这些关系的处理,才是手动管理最困难的地方。
Pod 是我们将要创建的第一个 k8s 资源,也是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。在了解 pod
和 container
的区别之前,我们可以先创建一个简单的 pod 试试,
我们先创建 nginx.yaml
文件,编写一个可以创建 nginx
的 Pod。
yaml# nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx