DataStream API 开发
1 入门案例
1.1 Flink 流处理程序的一般流程
- 获取 Flink 流处理执行环境
- 构建 source
- 数据处理
- 构建 sink
1.2 示例
编写 Flink 程序,用来统计单词的数量。
1.3 步骤
- 获取 Flink 批处理运行环境
- 构建一个 socket 源
- 使用 flink 操作进行单词统计
- 打印
说明:如果 linux 上没有安装 nc 服务 ,使用 yum 安装
yum install -y nc
2 输入数据集 Data Sources
Flink 中你可以使用 StreamExecutionEnvironment.addSource(source) 来为你的程序添 加数据来源。
Flink 已 经 提 供 了 若 干 实 现 好 了 的 source functions ,当 然 你 也 可 以 通 过 实 现 SourceFunction 来自定义非并行的 source 或者实现 ParallelSourceFunction 接口或者扩展 RichParallelSourceFunction 来自定义并行的 source。
2.1 Flink 在流处理上常见的 Source
Flink 在流处理上常见的 Source ,Flink 在流处理上的 source 和在批处理上的 source 基本一致。
大致有 4 大类
基于本地集合的 source(Collection-based-source)
基于文件的 source(File-based-source)- 读取文本文件,即符合 TextInputFormat 规 范 的文件,并将其作为字符串返回
基于网络套接字的 source(Socket-based-source)- 从 socket 读取。元素可以用分隔符 切分。
自定义的 source(Custom-source)
2.2 基于 kafka 的 source 操作
Kafka 基本操作
0、kafka 集群启动与停止
注意事项:在 kafka 启动前,一定要让 zookeeper 启动起来。
各个节点执行以下命令将 kafka 进程启动在后台
cd /export/servers/kafka_2.11-1.0.0
nohup bin/kafka-server-start.sh config/server.properties 2>&1 &
各个节点执行以下命令停止 kafka 集群
cd /export/servers/kafka_2.11-1.0.0
bin/kafka-server-stop.sh
1、创建 topic
cd /export/servers/kafka_2.11-1.0.0
bin/kafka-topics.sh --create --zookeeper node01:2181 --replication-factor 2 --partitions 3 --topic test
2、查看主题命令
cd /export/servers/kafka_2.11-1.0.0
bin/kafka-topics.sh --list --zookeeper node01:2181,node02:2181,node03:2181
3、生产者生产数据
cd /export/servers/kafka_2.11-1.0.0
bin/kafka-console-producer.sh --broker-list node01:9092,node02:9092,node03:9092 --topic test
4、消费者消费数据
cd /export/servers/kafka_2.11-1.0.0
bin/kafka-console-consumer.sh --from-beginning --topic test --zookeeper node01:2181,node02:2181,node03:2181
5、运行 describe topics 命令
cd /export/servers/kafka_2.11-1.0.0
bin/kafka-topics.sh --describe --zookeeper node01:2181 --topic test
6、增加 topic 分区数
cd /export/servers/kafka_2.11-1.0.0
bin/kafka-topics.sh --zookeeper zkhost:port --alter --topic topicName --partitions 8
7、增加配置
cd /export/servers/kafka_2.11-1.0.0
bin/kafka-topics.sh --zookeeper node01:2181 --alter --topic test --config flush.messages=1
8、删除配置
cd /export/servers/kafka_2.11-1.0.0
bin/kafka-topics.sh --zookeeper node01:2181 --alter --topic test --delete-config flush.messages
9、删除 topic
bin/kafka-topics.sh --zookeeper node01:2181 --delete --topic test
3 DataStream 的 Transformation
3.1 KeyBy
逻辑上将一个流分成不相交的分区,每个分区包含相同键的元素。在内部,这是通过散 列分区来实现的
3.2 Connect
用来将两个 dataStream 组装成一个 ConnectedStreams 而且这个 connectedStream 的组成结构就是保留原有的 dataStream 的结构体;这样我们 就可以把不同的数据组装成同一个结构
3.3 Split 和 select
Split 就是将一个 DataStream 分成两个或者多个 DataStream
Select 就是获取分流后对应的数据