参考官方文档[1],试玩了一下flink,记录整个过程
环境准备
# checkout git仓库
git clone --branch release-1.9 https://github.com/apache/flink-playgrounds.git
目录结构如下,当前只有一个playgroud那就是operations-playground,它让我们可以试玩flink的流式处理作业,涵盖以下功能:
- 错误恢复。停止taskmanager,再启动taskmanager,模拟flink作业节点失败的情况。
- 作业升级发布和扩缩容。当作业的配置、拓扑结构或者用户函数变更时,如何进行重新发布。作业并行度调整的扩缩容操作。都是通过savepoint重新提交作业来实现。
- 作业指标查询。
flink-playgrouds/docker/ops-playgroud-mages/java/flink-playgroud-clickcountjob
就是operations-playground的flink作业。
flink-playgrounds
├── docker
│ └── ops-playground-image
│ ├── Dockerfile
│ ├── java
│ │ └── flink-playground-clickcountjob
│ │ ├── LICENSE
│ │ ├── pom.xml
│ │ └── src
│ └── README.md
├── howto-update-playgrounds.md
├── LICENSE
├── operations-playground
│ ├── conf
│ │ ├── flink-conf.yaml
│ │ ├── log4j-cli.properties
│ │ └── log4j-console.properties
│ ├── docker-compose.yaml
│ └── README.md
└── README.md
试玩环境的部署通过docker-compose完成。
# 进入试玩目录
cd flink-playgrounds/operations-playground/
# 编译flink作业镜像,拉取flink、zookeeper、kafka镜像。
# 网络环境不好的话要先有个心理准备,整个过程耗时很长。
docker-compose build
# 启动container
docker-compose up -d
如上图所示,包含6个container
# 运行如下命令查看container
docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------------------------
operations-playground_clickevent- /docker-entrypoint.sh java ... Up 6123/tcp, 8081/tcp
generator_1
operations-playground_client_1 /docker-entrypoint.sh flin ... Exit 0
operations-playground_jobmanager_1 /docker-entrypoint.sh jobm ... Up 6123/tcp, 0.0.0.0:8081->8081/tcp
operations-playground_kafka_1 start-kafka.sh Up 0.0.0.0:9094->9094/tcp
operations-playground_taskmanager_1 /docker-entrypoint.sh task ... Up 6123/tcp, 8081/tcp
operations-playground_zookeeper_1 /bin/sh -c /usr/sbin/sshd ... Up 2181/tcp, 22/tcp, 2888/tcp, 3888/tcp
数据流如下图所示
试玩操作
错误恢复
# 观察flink作业的输出
docker-compose exec kafka kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic output
# 新起一个终端,杀掉taskmanager
docker-compose kill taskmanager
ui界面可看到作业的8个task都处于SCHEDULED状态,flink作业输出窗口无输出。
# 启动taskmanger
docker-compose up -d taskmanager
可看到作业的8个task变为running状态,作业输出窗口快速输出多个时间段的处理结