|
1 |
| - |
| 1 | +FlinkStreamSQL |
| 2 | +============ |
| 3 | +[](https://www.apache.org/licenses/LICENSE-2.0.html) |
| 4 | + |
2 | 5 | ## 技术交流
|
3 |
| - * 招聘大数据平台开发工程师,想了解岗位详细信息可以添加本人微信号ysqwhiletrue,注明招聘,如有意者发送简历至 [email protected] |
4 |
| - |
5 |
| - * 可以搜索群号30537511或者可以扫下面的二维码进入钉钉群 |
| 6 | +- 招聘 **大数据平台开发工程师 **,想了解岗位详细信息可以添加本人微信号ysqwhiletrue,注明招聘,如有意者发送简历至 [[email protected]](mailto:[email protected]) |
| 7 | +- 我们使用[钉钉](https://www.dingtalk.com/)沟通交流,可以搜索群号[**30537511**]或者扫描下面的二维码进入钉钉群 |
6 | 8 | <div align=center>
|
7 |
| - <img src=https://github.com/DTStack/flinkStreamSQL/blob/1.8_release/images/IMG_1573.JPG width=300 /> |
| 9 | + <img src=docs/images/streamsql_dd.jpg width=300 /> |
8 | 10 | </div>
|
9 | 11 |
|
10 |
| - |
11 |
| -## flinkStreamSQL |
12 |
| -> * 基于开源的flink,对其实时sql进行扩展 |
13 |
| -> > * 自定义create table 语法(包括源表,输出表,维表) |
14 |
| -> > * 自定义create view 语法 |
15 |
| -> > * 自定义create function 语法 |
16 |
| -> > * 实现了流与维表的join |
17 |
| -> > * 支持原生FLinkSQL所有的语法 |
18 |
| -> > * 扩展了输入和输出的性能指标到promethus |
19 |
| - |
20 |
| -## 已支持 |
21 |
| - * 源表:kafka 0.9、0.10、0.11、1.x版本 |
22 |
| - * 维表:mysql, SQlServer,oracle, hbase, mongo, redis, cassandra, serversocket, kudu, postgresql, clickhouse, impala, db2, sqlserver |
23 |
| - * 结果表:mysql, SQlServer, oracle, hbase, elasticsearch5.x, mongo, redis, cassandra, console, kudu, postgresql, clickhouse, impala, db2, sqlserver |
24 |
| - |
25 |
| - |
26 |
| -## 1 快速起步 |
27 |
| -### 1.1 运行模式 |
28 |
| - |
29 |
| - |
30 |
| -* 单机模式:对应Flink集群的单机模式 |
31 |
| -* standalone模式:对应Flink集群的分布式模式 |
32 |
| -* yarn模式:对应Flink集群的yarn模式 |
33 |
| - |
34 |
| -### 1.2 执行环境 |
35 |
| - |
36 |
| -* Java: JDK8及以上 |
37 |
| -* Flink集群: 1.4,1.5,1.8(单机模式不需要安装Flink集群) |
38 |
| -* 操作系统:理论上不限 |
39 |
| -* kerberos环境需要在flink-conf.yaml配置security.kerberos.login.keytab以及security.kerberos.login.principal参数,配置案例: |
40 |
| -``` |
41 |
| -## hadoop配置文件路径 |
42 |
| -fs.hdfs.hadoopconf: /Users/maqi/tmp/hadoopconf/hadoop_250 |
43 |
| -security.kerberos.login.use-ticket-cache: true |
44 |
| -security.kerberos.login.keytab: /Users/maqi/tmp/hadoopconf/hadoop_250/maqi.keytab |
45 |
| -security.kerberos.login.principal: [email protected] |
46 |
| -security.kerberos.login.contexts: Client,KafkaClient |
47 |
| -zookeeper.sasl.service-name: zookeeper |
48 |
| -zookeeper.sasl.login-context-name: Client |
49 |
| -
|
50 |
| -``` |
51 |
| - |
52 |
| -### 1.3 打包 |
53 |
| - |
54 |
| -进入项目根目录,使用maven打包: |
55 |
| - |
56 |
| -``` |
57 |
| -mvn clean package -Dmaven.test.skip |
58 |
| -
|
59 |
| -``` |
60 |
| - |
61 |
| -打包完成后的包结构: |
62 |
| - |
63 |
| -> * dt-center-flinkStreamSQL |
64 |
| -> > * bin: 任务启动脚本 |
65 |
| -> > * lib: launcher包存储路径,是任务提交的入口 |
66 |
| -> > * plugins: 插件包存储路径 |
67 |
| -> > * ........ : core及插件代码 |
68 |
| -
|
69 |
| -### 1.4 启动 |
70 |
| - |
71 |
| -#### 1.4.1 启动命令 |
72 |
| - |
73 |
| -``` |
74 |
| -sh submit.sh -sql D:\sideSql.txt -name xctest -remoteSqlPluginPath /opt/dtstack/150_flinkplugin/sqlplugin -localSqlPluginPath D:\gitspace\flinkStreamSQL\plugins -addjar \["udf.jar\"\] -mode yarn -flinkconf D:\flink_home\kudu150etc -yarnconf D:\hadoop\etc\hadoopkudu -confProp \{\"time.characteristic\":\"EventTime\",\"sql.checkpoint.interval\":10000\} -yarnSessionConf \{\"yid\":\"application_1564971615273_38182\"} |
75 |
| -``` |
76 |
| - |
77 |
| -#### 1.4.2 命令行参数选项 |
78 |
| - |
79 |
| -* **mode** |
80 |
| - * 描述:执行模式,也就是flink集群的工作模式 |
81 |
| - * local: 本地模式 |
82 |
| - * standalone: 提交到独立部署模式的flink集群 |
83 |
| - * yarn: 提交到yarn模式的flink集群(即提交到已有flink集群) |
84 |
| - * yarnPer: yarn per_job模式提交(即创建新flink application) |
85 |
| - * 必选:否 |
86 |
| - * 默认值:local |
87 |
| - |
88 |
| -* **name** |
89 |
| - * 描述:flink 任务对应名称。 |
90 |
| - * 必选:是 |
91 |
| - * 默认值:无 |
92 |
| - |
93 |
| -* **sql** |
94 |
| - * 描述:执行flink sql 的主体语句。 |
95 |
| - * 必选:是 |
96 |
| - * 默认值:无 |
97 |
| - |
98 |
| -* **localSqlPluginPath** |
99 |
| - * 描述:本地插件根目录地址,也就是打包后产生的plugins目录。 |
100 |
| - * 必选:是 |
101 |
| - * 默认值:无 |
102 |
| - |
103 |
| -* **remoteSqlPluginPath** |
104 |
| - * 描述:flink执行集群上的插件根目录地址(将打包好的插件存放到各个flink节点上,如果是yarn集群需要存放到所有的nodemanager上)。 |
105 |
| - * 必选:否 |
106 |
| - * 默认值:无 |
107 |
| - |
108 |
| -* **addjar** |
109 |
| - * 描述:扩展jar路径,当前主要是UDF定义的jar; |
110 |
| - * 格式:json |
111 |
| - * 必选:否 |
112 |
| - * 默认值:无 |
| 12 | +## 介绍 |
| 13 | + * 基于开源的flink,对其实时sql进行扩展 |
| 14 | + * 自定义create table 语法(包括源表,输出表,维表) |
| 15 | + * 自定义create view 语法 |
| 16 | + * 自定义create function 语法 |
| 17 | + * 实现了流与维表的join |
| 18 | + * 支持原生FLinkSQL所有的语法 |
| 19 | + * 扩展了输入和输出的性能指标到promethus |
113 | 20 |
|
114 |
| -* **confProp** |
115 |
| - * 描述:一些参数设置 |
116 |
| - * 格式: json |
117 |
| - * 必选:是 (如无参数填写空json即可) |
118 |
| - * 默认值:无 |
119 |
| - * 可选参数: |
120 |
| - * sql.ttl.min: 最小过期时间,大于0的整数,如1d、1h(d\D:天,h\H:小时,m\M:分钟,s\s:秒) |
121 |
| - * sql.ttl.max: 最大过期时间,大于0的整数,如2d、2h(d\D:天,h\H:小时,m\M:分钟,s\s:秒),需同时设置最小时间,且比最小时间大5分钟 |
122 |
| - * state.backend: 任务状态后端,可选为MEMORY,FILESYSTEM,ROCKSDB,默认为flinkconf中的配置。 |
123 |
| - * state.checkpoints.dir: FILESYSTEM,ROCKSDB状态后端文件系统存储路径,例如:hdfs://ns1/dtInsight/flink180/checkpoints。 |
124 |
| - * state.backend.incremental: ROCKSDB状态后端是否开启增量checkpoint,默认为true。 |
125 |
| - * sql.env.parallelism: 默认并行度设置 |
126 |
| - * sql.max.env.parallelism: 最大并行度设置 |
127 |
| - * time.characteristic: 可选值[ProcessingTime|IngestionTime|EventTime] |
128 |
| - * sql.checkpoint.interval: 设置了该参数表明开启checkpoint(ms) |
129 |
| - * sql.checkpoint.mode: 可选值[EXACTLY_ONCE|AT_LEAST_ONCE] |
130 |
| - * sql.checkpoint.timeout: 生成checkpoint的超时时间(ms) |
131 |
| - * sql.max.concurrent.checkpoints: 最大并发生成checkpoint数 |
132 |
| - * sql.checkpoint.cleanup.mode: 默认是不会将checkpoint存储到外部存储,[true(任务cancel之后会删除外部存储)|false(外部存储需要手动删除)] |
133 |
| - * flinkCheckpointDataURI: 设置checkpoint的外部存储路径,根据实际的需求设定文件路径,hdfs://, file:// |
134 |
| - * jobmanager.memory.mb: per_job模式下指定jobmanager的内存大小(单位MB, 默认值:768) |
135 |
| - * taskmanager.memory.mb: per_job模式下指定taskmanager的内存大小(单位MB, 默认值:768) |
136 |
| - * taskmanager.num: per_job模式下指定taskmanager的实例数(默认1) |
137 |
| - * taskmanager.slots:per_job模式下指定每个taskmanager对应的slot数量(默认1) |
138 |
| - * savePointPath:任务恢复点的路径(默认无) |
139 |
| - * allowNonRestoredState:指示保存点是否允许非还原状态的标志(默认false) |
140 |
| - * logLevel: 日志级别动态配置(默认info) |
141 |
| - * [prometheus 相关参数](docs/prometheus.md) per_job可指定metric写入到外部监控组件,以prometheus pushgateway举例 |
| 21 | +## 目录 |
| 22 | + |
| 23 | +[ 1.1 demo](docs/demo.md) |
| 24 | +[ 1.2 快速开始](docs/quickStart.md) |
| 25 | +[ 1.3 参数配置](docs/config.md) |
| 26 | +[ 1.4 支持的插件介绍和demo](docs/pluginsInfo.md) |
| 27 | +[ 1.5 指标参数](docs/newMetric.md) |
| 28 | +[ 1.6 自定义函数](docs/function.md) |
| 29 | +[ 1.7 自定义视图](docs/createView.md) |
| 30 | + |
| 31 | +## 如何贡献FlinkStreamSQL |
142 | 32 |
|
143 |
| - |
144 |
| -* **flinkconf** |
145 |
| - * 描述:flink配置文件所在的目录(单机模式下不需要),如/hadoop/flink-1.4.0/conf |
146 |
| - * 必选:否 |
147 |
| - * 默认值:无 |
148 |
| - |
149 |
| -* **yarnconf** |
150 |
| - * 描述:Hadoop配置文件(包括hdfs和yarn)所在的目录(单机模式下不需要),如/hadoop/etc/hadoop |
151 |
| - * 必选:否 |
152 |
| - * 默认值:无 |
153 |
| - |
154 |
| -* **flinkJarPath** |
155 |
| - * 描述:per_job 模式提交需要指定本地的flink jar存放路径 |
156 |
| - * 必选:否 |
157 |
| - * 默认值:false |
158 |
| - |
159 |
| -* **queue** |
160 |
| - * 描述:per_job 模式下指定的yarn queue |
161 |
| - * 必选:否 |
162 |
| - * 默认值:false |
163 |
| - |
164 |
| -* **pluginLoadMode** |
165 |
| - * 描述:per_job 模式下的插件包加载方式。classpath:从每台机器加载插件包,shipfile:将需要插件从提交的节点上传到hdfs,不需要每台安装插件 |
166 |
| - * 必选:否 |
167 |
| - * 默认值:classpath |
168 |
| - |
169 |
| -* **yarnSessionConf** |
170 |
| - * 描述:yarn session 模式下指定的运行的一些参数,[可参考](https://ci.apache.org/projects/flink/flink-docs-release-1.8/ops/cli.html),目前只支持指定yid |
171 |
| - * 必选:否 |
172 |
| - * 默认值:false |
173 |
| - |
174 |
| - |
175 |
| -## 2 结构 |
176 |
| -### 2.1 源表插件 |
177 |
| -* [kafka 源表插件](docs/kafkaSource.md) |
178 |
| - |
179 |
| -### 2.2 结果表插件 |
180 |
| -* [elasticsearch 结果表插件](docs/elasticsearchSink.md) |
181 |
| -* [hbase 结果表插件](docs/hbaseSink.md) |
182 |
| -* [mysql 结果表插件](docs/mysqlSink.md) |
183 |
| -* [oracle 结果表插件](docs/oracleSink.md) |
184 |
| -* [mongo 结果表插件](docs/mongoSink.md) |
185 |
| -* [redis 结果表插件](docs/redisSink.md) |
186 |
| -* [cassandra 结果表插件](docs/cassandraSink.md) |
187 |
| -* [kudu 结果表插件](docs/kuduSink.md) |
188 |
| -* [postgresql 结果表插件](docs/postgresqlSink.md) |
189 |
| -* [clickhouse 结果表插件](docs/clickhouseSink.md) |
190 |
| -* [impala 结果表插件](docs/impalaSink.md) |
191 |
| -* [db2 结果表插件](docs/db2Sink.md) |
192 |
| -* [sqlserver 结果表插件](docs/sqlserverSink.md) |
193 |
| - |
194 |
| -### 2.3 维表插件 |
195 |
| -* [hbase 维表插件](docs/hbaseSide.md) |
196 |
| -* [mysql 维表插件](docs/mysqlSide.md) |
197 |
| -* [oracle 维表插件](docs/oracleSide.md) |
198 |
| -* [mongo 维表插件](docs/mongoSide.md) |
199 |
| -* [redis 维表插件](docs/redisSide.md) |
200 |
| -* [cassandra 维表插件](docs/cassandraSide.md) |
201 |
| -* [kudu 维表插件](docs/kuduSide.md) |
202 |
| -* [postgresql 维表插件](docs/postgresqlSide.md) |
203 |
| -* [clickhouse 维表插件](docs/clickhouseSide.md) |
204 |
| -* [impala 维表插件](docs/impalaSide.md) |
205 |
| -* [db2 维表插件](docs/db2Side.md) |
206 |
| -* [sqlserver 维表插件](docs/sqlserverSide.md) |
207 |
| - |
208 |
| -## 3 性能指标(新增) |
209 |
| - |
210 |
| -### kafka插件 |
211 |
| -* 业务延迟: flink_taskmanager_job_task_operator_dtEventDelay(单位s) |
212 |
| - 数据本身的时间和进入flink的当前时间的差值. |
213 |
| - |
214 |
| -* 各个输入源的脏数据:flink_taskmanager_job_task_operator_dtDirtyData |
215 |
| - 从kafka获取的数据解析失败的视为脏数据 |
216 |
| - |
217 |
| -* 各Source的数据输入TPS: flink_taskmanager_job_task_operator_dtNumRecordsInRate |
218 |
| - kafka接受的记录数(未解析前)/s |
219 |
| - |
220 |
| -* 各Source的数据输入RPS: flink_taskmanager_job_task_operator_dtNumRecordsInResolveRate |
221 |
| - kafka接受的记录数(解析后)/s |
222 |
| - |
223 |
| -* 各Source的数据输入BPS: flink_taskmanager_job_task_operator_dtNumBytesInRate |
224 |
| - kafka接受的字节数/s |
225 |
| - |
226 |
| -* Kafka作为输入源的各个分区的延迟数: flink_taskmanager_job_task_operator_topic_partition_dtTopicPartitionLag |
227 |
| - 当前kafka10,kafka11有采集该指标 |
228 |
| - |
229 |
| -* 各个输出源RPS: flink_taskmanager_job_task_operator_dtNumRecordsOutRate |
230 |
| - 写入的外部记录数/s |
231 |
| - |
232 |
| - |
233 |
| -## 4 样例 |
234 |
| - |
235 |
| -``` |
236 |
| -
|
237 |
| -CREATE (scala|table|aggregate) FUNCTION CHARACTER_LENGTH WITH com.dtstack.Kun; |
238 |
| -
|
239 |
| -
|
240 |
| -CREATE TABLE MyTable( |
241 |
| - name varchar, |
242 |
| - channel varchar, |
243 |
| - pv int, |
244 |
| - xctime bigint, |
245 |
| - CHARACTER_LENGTH(channel) AS timeLeng //自定义的函数 |
246 |
| - )WITH( |
247 |
| - type ='kafka09', |
248 |
| - bootstrapServers ='172.16.8.198:9092', |
249 |
| - zookeeperQuorum ='172.16.8.198:2181/kafka', |
250 |
| - offsetReset ='latest', |
251 |
| - topic ='nbTest1', |
252 |
| - parallelism ='1' |
253 |
| - ); |
254 |
| -
|
255 |
| -CREATE TABLE MyResult( |
256 |
| - channel varchar, |
257 |
| - pv varchar |
258 |
| - )WITH( |
259 |
| - type ='mysql', |
260 |
| - url ='jdbc:mysql://172.16.8.104:3306/test?charset=utf8', |
261 |
| - userName ='dtstack', |
262 |
| - password ='abc123', |
263 |
| - tableName ='pv2', |
264 |
| - parallelism ='1' |
265 |
| - ); |
266 |
| -
|
267 |
| -CREATE TABLE workerinfo( |
268 |
| - cast(logtime as TIMESTAMP) AS rtime, |
269 |
| - cast(logtime) AS rtime |
270 |
| - )WITH( |
271 |
| - type ='hbase', |
272 |
| - zookeeperQuorum ='rdos1:2181', |
273 |
| - tableName ='workerinfo', |
274 |
| - rowKey ='ce,de', |
275 |
| - parallelism ='1', |
276 |
| - zookeeperParent ='/hbase' |
277 |
| - ); |
278 |
| -
|
279 |
| -CREATE TABLE sideTable( |
280 |
| - cf:name varchar as name, |
281 |
| - cf:info varchar as info, |
282 |
| - PRIMARY KEY(name), |
283 |
| - PERIOD FOR SYSTEM_TIME //维表标识 |
284 |
| - )WITH( |
285 |
| - type ='hbase', |
286 |
| - zookeeperQuorum ='rdos1:2181', |
287 |
| - zookeeperParent ='/hbase', |
288 |
| - tableName ='workerinfo', |
289 |
| - cache ='LRU', |
290 |
| - cacheSize ='10000', |
291 |
| - cacheTTLMs ='60000', |
292 |
| - parallelism ='1' |
293 |
| - ); |
294 |
| -
|
295 |
| -insert |
296 |
| -into |
297 |
| - MyResult |
298 |
| - select |
299 |
| - d.channel, |
300 |
| - d.info |
301 |
| - from |
302 |
| - ( select |
303 |
| - a.*,b.info |
304 |
| - from |
305 |
| - MyTable a |
306 |
| - join |
307 |
| - sideTable b |
308 |
| - on a.channel=b.name |
309 |
| - where |
310 |
| - a.channel = 'xc2' |
311 |
| - and a.pv=10 ) as d |
312 |
| -``` |
313 |
| - |
314 |
| - |
315 |
| - |
| 33 | +## License |
| 34 | +FlinkStreamSQL is under the Apache 2.0 license. See the [LICENSE](http://www.apache.org/licenses/LICENSE-2.0) file for details. |
| 35 | + |
| 36 | + |
0 commit comments