gitextract_8nri6nxi/ ├── .gitignore ├── Flink-Forward-2020/ │ └── README.md ├── Flink-Forward-Asia-2019-PPT/ │ └── README.md ├── Flink-Forward-Asia-2020-PPT/ │ └── README.md ├── Flink-Forward-Asia-2021-PPT/ │ └── README.md ├── LICENSE ├── README.md ├── books/ │ ├── README.md │ ├── flink-in-action-1.1.md │ ├── flink-in-action-1.2.md │ ├── flink-in-action-1.3.md │ ├── flink-in-action-10.1.md │ ├── flink-in-action-10.2.md │ ├── flink-in-action-11.1.md │ ├── flink-in-action-11.2.md │ ├── flink-in-action-11.3.md │ ├── flink-in-action-11.4.md │ ├── flink-in-action-11.5.md │ ├── flink-in-action-12.1.md │ ├── flink-in-action-12.2.md │ ├── flink-in-action-12.3.md │ ├── flink-in-action-2.1.md │ ├── flink-in-action-2.2.md │ ├── flink-in-action-2.3.md │ ├── flink-in-action-2.4.md │ ├── flink-in-action-3.1.md │ ├── flink-in-action-3.10.md │ ├── flink-in-action-3.11.md │ ├── flink-in-action-3.12.md │ ├── flink-in-action-3.2.md │ ├── flink-in-action-3.3.md │ ├── flink-in-action-3.4.md │ ├── flink-in-action-3.5.md │ ├── flink-in-action-3.6.md │ ├── flink-in-action-3.7.md │ ├── flink-in-action-3.8.md │ ├── flink-in-action-3.9.md │ ├── flink-in-action-4.1.md │ ├── flink-in-action-4.2.md │ ├── flink-in-action-4.3.md │ ├── flink-in-action-5.1.md │ ├── flink-in-action-5.2.md │ ├── flink-in-action-6.1.md │ ├── flink-in-action-6.2.md │ ├── flink-in-action-6.3.md │ ├── flink-in-action-6.4.md │ ├── flink-in-action-6.5.md │ ├── flink-in-action-7.1.md │ ├── flink-in-action-7.2.md │ ├── flink-in-action-8.1.md │ ├── flink-in-action-8.2.md │ ├── flink-in-action-9.1.md │ ├── flink-in-action-9.2.md │ ├── flink-in-action-9.3.md │ ├── flink-in-action-9.4.md │ ├── flink-in-action-9.5.md │ └── flink-in-action-9.6.md ├── flink-learning-basic/ │ ├── README.md │ ├── flink-learning-data-sinks/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── data/ │ │ │ └── sinks/ │ │ │ ├── Main.java │ │ │ ├── Main2.java │ │ │ ├── model/ │ │ │ │ └── Student.java │ │ │ ├── sinks/ │ │ │ │ ├── MySink.java │ │ │ │ └── SinkToMySQL.java │ │ │ └── utils/ │ │ │ └── KafkaUtil.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── logback.xml │ │ └── student.sql │ ├── flink-learning-data-sources/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── data/ │ │ │ └── sources/ │ │ │ ├── Main.java │ │ │ ├── Main2.java │ │ │ ├── ScheduleMain.java │ │ │ ├── model/ │ │ │ │ ├── Rule.java │ │ │ │ └── Student.java │ │ │ ├── sources/ │ │ │ │ └── SourceFromMySQL.java │ │ │ └── utils/ │ │ │ ├── KafkaUtil.java │ │ │ └── MySQLUtil.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── logback.xml │ │ ├── rule.sql │ │ └── student.sql │ ├── flink-learning-libraries/ │ │ ├── README.md │ │ ├── flink-learning-libraries-cep/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── zhisheng/ │ │ │ │ └── libraries/ │ │ │ │ └── cep/ │ │ │ │ ├── CEPMain.java │ │ │ │ ├── CombinePatternMain.java │ │ │ │ ├── IndividualPatternQuantifier.java │ │ │ │ └── model/ │ │ │ │ ├── Alert.java │ │ │ │ ├── Event.java │ │ │ │ └── SubEvent.java │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ └── logback.xml │ │ ├── flink-learning-libraries-state-processor-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── zhisheng/ │ │ │ │ └── libraries/ │ │ │ │ └── stateProcessApi/ │ │ │ │ ├── Main.java │ │ │ │ └── StatefulFunctionWithTime.java │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ └── logback.xml │ │ └── pom.xml │ ├── flink-learning-metrics/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── metrics/ │ │ └── custom/ │ │ ├── CustomCounterMetrics.java │ │ ├── CustomCounterMetrics2.java │ │ ├── CustomCounterMetrics3.java │ │ ├── CustomGaugeMetrics.java │ │ ├── CustomHistogramMetrics.java │ │ └── CustomMeterMetrics.java │ ├── flink-learning-state/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── state/ │ │ │ ├── Main.java │ │ │ ├── metadata/ │ │ │ │ └── MetadataSerializer.java │ │ │ ├── operator/ │ │ │ │ └── state/ │ │ │ │ ├── UnionListStateExample.java │ │ │ │ └── util/ │ │ │ │ └── UnionListStateUtil.java │ │ │ └── queryablestate/ │ │ │ ├── ClimateLog.java │ │ │ ├── QueryClient.java │ │ │ └── QuerybleStateStream.java │ │ └── resources/ │ │ └── _metadata │ ├── flink-learning-window/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── zhisheng/ │ │ │ │ ├── constant/ │ │ │ │ │ └── WindowConstant.java │ │ │ │ ├── function/ │ │ │ │ │ ├── CustomSource.java │ │ │ │ │ ├── CustomTrigger.java │ │ │ │ │ └── LineSplitter.java │ │ │ │ └── window/ │ │ │ │ ├── CustomTriggerMain.java │ │ │ │ ├── Main.java │ │ │ │ ├── Main2.java │ │ │ │ ├── Main3.java │ │ │ │ ├── Main4.java │ │ │ │ ├── Main5.java │ │ │ │ └── WindowAll.java │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ └── logback.xml │ │ └── test/ │ │ └── java/ │ │ └── TestWindowSize.java │ └── pom.xml ├── flink-learning-cdc/ │ ├── README.md │ ├── flink-db2-cdc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── cdc/ │ │ └── db2/ │ │ └── Db2CDCExample.java │ ├── flink-mongodb-cdc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── cdc/ │ │ └── mongodb/ │ │ └── MongoDBCDCExample.java │ ├── flink-mysql-cdc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── cdc/ │ │ └── mysql/ │ │ └── MysqlCDCExample.java │ ├── flink-oceanbase-cdc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── cdc/ │ │ └── oceanbase/ │ │ └── OceanBaseCDCExample.java │ ├── flink-oracle-cdc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── cdc/ │ │ └── oracle/ │ │ └── OracleCDCExample.java │ ├── flink-postgres-cdc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── cdc/ │ │ └── postgres/ │ │ └── PostgresCDCExample.java │ ├── flink-sqlserver-cdc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── cdc/ │ │ └── sqlserver/ │ │ └── SqlServerCDCExample.java │ ├── flink-tidb-cdc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── cdc/ │ │ └── tidb/ │ │ └── TidbCDCExample.java │ └── pom.xml ├── flink-learning-common/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── common/ │ │ │ ├── constant/ │ │ │ │ ├── MachineConstant.java │ │ │ │ └── PropertiesConstants.java │ │ │ ├── model/ │ │ │ │ ├── LogEvent.java │ │ │ │ ├── MetricEvent.java │ │ │ │ ├── OrderEvent.java │ │ │ │ ├── OrderLineEvent.java │ │ │ │ ├── ProductEvent.java │ │ │ │ ├── ShopEvent.java │ │ │ │ ├── UserEvent.java │ │ │ │ └── WordEvent.java │ │ │ ├── schemas/ │ │ │ │ ├── KafkaMetricSchema.java │ │ │ │ ├── LogSchema.java │ │ │ │ ├── MetricSchema.java │ │ │ │ ├── OrderLineSchema.java │ │ │ │ ├── OrderSchema.java │ │ │ │ ├── ProductSchema.java │ │ │ │ ├── ShopSchema.java │ │ │ │ └── UserSchema.java │ │ │ ├── utils/ │ │ │ │ ├── CheckPointUtil.java │ │ │ │ ├── DateUtil.java │ │ │ │ ├── ExecutionEnvUtil.java │ │ │ │ ├── GsonUtil.java │ │ │ │ ├── HttpUtil.java │ │ │ │ └── KafkaConfigUtil.java │ │ │ └── watermarks/ │ │ │ └── MetricWatermark.java │ │ └── resources/ │ │ └── product.sql │ └── test/ │ └── java/ │ └── com/ │ └── zhisheng/ │ └── common/ │ └── utils/ │ └── DateUtilTests.java ├── flink-learning-configuration-center/ │ ├── flink-learning-configuration-center-apollo/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── configuration/ │ │ │ └── apollo/ │ │ │ └── FlinkApolloTest.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── app.properties │ ├── flink-learning-configuration-center-nacos/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── configuration/ │ │ └── nacos/ │ │ ├── FlinkNacosTest.java │ │ └── FlinkNacosTest2.java │ └── pom.xml ├── flink-learning-connectors/ │ ├── README.md │ ├── flink-learning-connectors-activemq/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── activemq/ │ │ │ └── Main.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-cassandra/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── cassandra/ │ │ │ ├── batch/ │ │ │ │ ├── BatchExample.java │ │ │ │ ├── BatchPojoExample.java │ │ │ │ └── CustomCassandraAnnotatedPojo.java │ │ │ └── streaming/ │ │ │ ├── CassandraPojoSinkExample.java │ │ │ ├── CassandraTupleSinkExample.java │ │ │ ├── CassandraTupleWriteAheadSinkExample.java │ │ │ └── Message.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-clickhouse/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── clickhouse/ │ │ │ ├── ClickhouseSink.java │ │ │ ├── applied/ │ │ │ │ ├── ClickhouseSinkBuffer.java │ │ │ │ ├── ClickhouseSinkManager.java │ │ │ │ ├── ClickhouseSinkScheduledChecker.java │ │ │ │ └── ClickhouseWriter.java │ │ │ ├── model/ │ │ │ │ ├── ClickhouseClusterSettings.java │ │ │ │ ├── ClickhouseRequestBlank.java │ │ │ │ ├── ClickhouseSinkCommonParams.java │ │ │ │ └── ClickhouseSinkConsts.java │ │ │ └── util/ │ │ │ ├── ConfigUtil.java │ │ │ └── ThreadUtil.java │ │ └── resources/ │ │ ├── application.properties │ │ ├── logback.xml │ │ └── reference.conf │ ├── flink-learning-connectors-es/ │ │ ├── flink-learning-connectors-es-common/ │ │ │ └── pom.xml │ │ ├── flink-learning-connectors-es-universal/ │ │ │ ├── README.md │ │ │ └── pom.xml │ │ ├── flink-learning-connectors-es5/ │ │ │ ├── README.md │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── zhisheng/ │ │ │ │ └── connectors/ │ │ │ │ └── es5/ │ │ │ │ └── Sink2ES5Main.java │ │ │ └── resources/ │ │ │ └── logback.xml │ │ ├── flink-learning-connectors-es6/ │ │ │ ├── README.md │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── zhisheng/ │ │ │ │ └── connectors/ │ │ │ │ └── es6/ │ │ │ │ ├── Sink2ES6Main.java │ │ │ │ └── utils/ │ │ │ │ ├── ESSinkUtil.java │ │ │ │ └── RetryRequestFailureHandler.java │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ ├── es_index_template.json │ │ │ └── logback.xml │ │ ├── flink-learning-connectors-es7/ │ │ │ ├── README.md │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── zhisheng/ │ │ │ │ └── connectors/ │ │ │ │ └── es7/ │ │ │ │ ├── Sink2ES7Main.java │ │ │ │ └── util/ │ │ │ │ ├── ESSinkUtil.java │ │ │ │ └── RetryRequestFailureHandler.java │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ ├── es_index_template.json │ │ │ └── logback.xml │ │ └── pom.xml │ ├── flink-learning-connectors-flume/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── flume/ │ │ │ ├── FlumeEventBuilder.java │ │ │ ├── FlumeSink.java │ │ │ ├── Main.java │ │ │ └── utils/ │ │ │ └── FlumeUtil.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-gcp-pubsub/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── gcp/ │ │ │ └── pubsub/ │ │ │ ├── IntegerSerializer.java │ │ │ ├── Main.java │ │ │ └── PubSubPublisherUtil.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-hbase/ │ │ ├── README.md │ │ ├── flink-learning-connectors-hbase-1.4/ │ │ │ └── pom.xml │ │ ├── flink-learning-connectors-hbase-2.2/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── hbase/ │ │ │ │ ├── HBaseStreamWriteMain.java │ │ │ │ ├── Main.java │ │ │ │ └── constant/ │ │ │ │ └── HBaseConstant.java │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ └── logback.xml │ │ └── pom.xml │ ├── flink-learning-connectors-hdfs/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── hdfs/ │ │ │ └── Main.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-hive/ │ │ ├── README.md │ │ ├── flink-learning-connectors-hive-1.2.2/ │ │ │ └── pom.xml │ │ ├── flink-learning-connectors-hive-2.2.0/ │ │ │ └── pom.xml │ │ ├── flink-learning-connectors-hive-2.3.6/ │ │ │ └── pom.xml │ │ ├── flink-learning-connectors-hive-3.1.2/ │ │ │ └── pom.xml │ │ └── pom.xml │ ├── flink-learning-connectors-influxdb/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── influxdb/ │ │ │ ├── InfluxDBConfig.java │ │ │ ├── InfluxDBSink.java │ │ │ └── Main.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-jdbc/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── jdbc/ │ │ │ └── Main.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-kafka/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── kafka/ │ │ │ ├── FlinkKafkaConsumerTest1.java │ │ │ ├── FlinkKafkaConsumerTest2.java │ │ │ ├── FlinkKafkaProducerTest1.java │ │ │ ├── FlinkKafkaSchemaTest1.java │ │ │ ├── JSONKeyValueDeserializationSchemaTest.java │ │ │ ├── KafkaDeserializationSchemaTest.java │ │ │ └── Main.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-kudu/ │ │ ├── README.md │ │ └── pom.xml │ ├── flink-learning-connectors-mysql/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── mysql/ │ │ │ ├── Main.java │ │ │ ├── model/ │ │ │ │ └── Student.java │ │ │ ├── sinks/ │ │ │ │ └── SinkToMySQL.java │ │ │ └── utils/ │ │ │ └── KafkaUtil.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-netty/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── connectors/ │ │ └── netty/ │ │ └── Main.java │ ├── flink-learning-connectors-nifi/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── nifi/ │ │ │ ├── NiFiSinkMain.java │ │ │ └── NiFiSourceMain.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-pulsar/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── pulsar/ │ │ │ ├── PulsarSinkMain.java │ │ │ └── PulsarSourceMain.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-rabbitmq/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── rabbitmq/ │ │ │ ├── Main.java │ │ │ ├── Main1.java │ │ │ ├── model/ │ │ │ │ └── EndPoint.java │ │ │ └── utils/ │ │ │ └── RabbitMQProducerUtil.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ ├── flink-learning-connectors-redis/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── zhisheng/ │ │ │ │ └── connectors/ │ │ │ │ └── redis/ │ │ │ │ ├── Main.java │ │ │ │ └── utils/ │ │ │ │ └── ProductUtil.java │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ └── logback.xml │ │ └── test/ │ │ └── java/ │ │ └── RedisTest.java │ ├── flink-learning-connectors-rocketmq/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── connectors/ │ │ │ └── rocketmq/ │ │ │ ├── RocketMQConfig.java │ │ │ ├── RocketMQSink.java │ │ │ ├── RocketMQSource.java │ │ │ ├── RocketMQUtils.java │ │ │ ├── RunningChecker.java │ │ │ ├── common/ │ │ │ │ ├── selector/ │ │ │ │ │ ├── DefaultTopicSelector.java │ │ │ │ │ ├── SimpleTopicSelector.java │ │ │ │ │ └── TopicSelector.java │ │ │ │ └── serialization/ │ │ │ │ ├── KeyValueDeserializationSchema.java │ │ │ │ ├── KeyValueSerializationSchema.java │ │ │ │ ├── SimpleKeyValueDeserializationSchema.java │ │ │ │ └── SimpleKeyValueSerializationSchema.java │ │ │ └── example/ │ │ │ ├── RocketMQFlinkExample.java │ │ │ ├── SimpleConsumer.java │ │ │ └── SimpleProducer.java │ │ └── resources/ │ │ ├── application.properties │ │ └── logback.xml │ └── pom.xml ├── flink-learning-core/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── zhisheng/ │ └── core/ │ ├── exception/ │ │ └── FlinkRuntimeException.java │ ├── factory/ │ │ ├── DeserializerFactory.java │ │ ├── SerializerFactory.java │ │ ├── SinkFactory.java │ │ └── SourceFactory.java │ └── utils/ │ ├── ArrayUtils.java │ ├── CollectionUtil.java │ ├── ExecutorUtils.java │ ├── StringUtils.java │ └── TimeUtils.java ├── flink-learning-datalake/ │ ├── README.md │ ├── flink-learning-datalake-deltalake/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── datalake/ │ │ └── delta/ │ │ └── DeltaLakeExample.java │ ├── flink-learning-datalake-hudi/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── datalake/ │ │ └── hudi/ │ │ ├── HudiCDCSyncExample.java │ │ ├── HudiDataLakeExample.java │ │ └── HudiStreamingWriteExample.java │ ├── flink-learning-datalake-iceberg/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── datalake/ │ │ └── iceberg/ │ │ ├── IcebergCDCSyncExample.java │ │ ├── IcebergDataLakeExample.java │ │ └── IcebergStreamingWriteExample.java │ ├── flink-learning-paimon/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── datalake/ │ │ └── paimon/ │ │ ├── PaimonCDCSyncExample.java │ │ ├── PaimonDataLakeExample.java │ │ └── PaimonStreamingWriteExample.java │ └── pom.xml ├── flink-learning-examples/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── examples/ │ │ │ ├── batch/ │ │ │ │ ├── accumulator/ │ │ │ │ │ ├── Main.java │ │ │ │ │ └── Main2.java │ │ │ │ └── wordcount/ │ │ │ │ └── Main.java │ │ │ ├── streaming/ │ │ │ │ ├── async/ │ │ │ │ │ └── AsyncIOExample.java │ │ │ │ ├── broadcast/ │ │ │ │ │ ├── BroadcastAlertRule.java │ │ │ │ │ ├── DataSetBrocastMain.java │ │ │ │ │ ├── GetAlarmNotifyData.java │ │ │ │ │ ├── Main.java │ │ │ │ │ ├── Main2.java │ │ │ │ │ └── MyBroadcastProcessFunction.java │ │ │ │ ├── chain/ │ │ │ │ │ ├── DefaultChainMain.java │ │ │ │ │ ├── DisableChainMain.java │ │ │ │ │ ├── DisableChainMain1.java │ │ │ │ │ ├── DisableChainMain3.java │ │ │ │ │ ├── ExecutionPlanMain.java │ │ │ │ │ ├── SharingGroupMain.java │ │ │ │ │ └── StartNewChainMain.java │ │ │ │ ├── checkpoint/ │ │ │ │ │ ├── Main.java │ │ │ │ │ ├── PvStatExactlyOnce.java │ │ │ │ │ ├── PvStatLocalKeyByExactlyOnce.java │ │ │ │ │ └── util/ │ │ │ │ │ └── PvStatExactlyOnceKafkaUtil.java │ │ │ │ ├── config/ │ │ │ │ │ ├── ConfigurationMain.java │ │ │ │ │ ├── ConfigurationMain1.java │ │ │ │ │ ├── ParameterToolGetArgsMain.java │ │ │ │ │ ├── ParameterToolGetPropertiesMain.java │ │ │ │ │ └── ParameterToolGetSystemMain.java │ │ │ │ ├── file/ │ │ │ │ │ └── Main.java │ │ │ │ ├── join/ │ │ │ │ │ ├── WindowJoin.java │ │ │ │ │ └── WindowJoinSampleData.java │ │ │ │ ├── ml/ │ │ │ │ │ ├── IncrementalLearningSkeleton.java │ │ │ │ │ └── IncrementalLearningSkeletonData.java │ │ │ │ ├── parallelism/ │ │ │ │ │ └── Main.java │ │ │ │ ├── processFunction/ │ │ │ │ │ ├── KeyedProcessFunctionMain.java │ │ │ │ │ └── ProcessFunctionMain.java │ │ │ │ ├── remote/ │ │ │ │ │ └── Main.java │ │ │ │ ├── restartStrategy/ │ │ │ │ │ ├── AEMain.java │ │ │ │ │ ├── DefaultRestartStrategyMain.java │ │ │ │ │ ├── EnableCheckpointMain.java │ │ │ │ │ ├── FailureRateRestartStrategyMain.java │ │ │ │ │ ├── FixedDelayRestartStrategyMain.java │ │ │ │ │ └── NoRestartStrategyMain.java │ │ │ │ ├── sideoutput/ │ │ │ │ │ ├── FilterEvent.java │ │ │ │ │ ├── Main.java │ │ │ │ │ └── SideOutputEvent.java │ │ │ │ ├── socket/ │ │ │ │ │ ├── LambdaMain.java │ │ │ │ │ └── Main.java │ │ │ │ ├── state/ │ │ │ │ │ └── StateMain.java │ │ │ │ ├── watermark/ │ │ │ │ │ ├── Main.java │ │ │ │ │ ├── Main1.java │ │ │ │ │ ├── Main2.java │ │ │ │ │ ├── Main3.java │ │ │ │ │ ├── Main4.java │ │ │ │ │ ├── Word.java │ │ │ │ │ ├── WordPeriodicWatermark.java │ │ │ │ │ └── WordPunctuatedWatermark.java │ │ │ │ └── wordcount/ │ │ │ │ └── Main.java │ │ │ └── util/ │ │ │ ├── MySQLUtil.java │ │ │ └── ThrottledIterator.java │ │ └── resources/ │ │ ├── alarm-notify.sql │ │ ├── application.properties │ │ └── logback.xml │ └── test/ │ └── java/ │ └── Test1.java ├── flink-learning-extends/ │ ├── FlinkLogKafkaAppender/ │ │ ├── KafkaAppenderCommon/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── flink/ │ │ │ ├── model/ │ │ │ │ └── LogEvent.java │ │ │ └── util/ │ │ │ ├── ExceptionUtil.java │ │ │ └── JacksonUtil.java │ │ ├── Log4j2KafkaAppender/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── zhisheng/ │ │ │ │ │ └── log/ │ │ │ │ │ └── appender/ │ │ │ │ │ └── KafkaLog4j2Appender.java │ │ │ │ └── resources/ │ │ │ │ └── log4j2-example.properties │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── ExceptionUtilTest.java │ │ ├── Log4jKafkaAppender/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── zhisheng/ │ │ │ │ └── log/ │ │ │ │ └── appender/ │ │ │ │ └── KafkaLog4jAppender.java │ │ │ └── resources/ │ │ │ └── log4j-example.properties │ │ ├── README.md │ │ └── pom.xml │ ├── README.md │ ├── flink-metrics/ │ │ ├── flink-metrics-kafka/ │ │ │ ├── README.md │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── flink/ │ │ │ │ └── metrics/ │ │ │ │ └── kafka/ │ │ │ │ ├── KafkaReporter.java │ │ │ │ ├── KafkaReporterFactory.java │ │ │ │ ├── KafkaReporterOptions.java │ │ │ │ ├── MetricEvent.java │ │ │ │ └── util/ │ │ │ │ └── JacksonUtil.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── services/ │ │ │ └── org.apache.flink.metrics.reporter.MetricReporterFactory │ │ ├── flink-metrics-prometheus/ │ │ │ ├── README.md │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── flink/ │ │ │ │ │ └── metrics/ │ │ │ │ │ └── prometheus/ │ │ │ │ │ ├── AbstractPrometheusReporter.java │ │ │ │ │ ├── ClusterMode.java │ │ │ │ │ ├── PrometheusPushGatewayReporter.java │ │ │ │ │ ├── PrometheusPushGatewayReporterFactory.java │ │ │ │ │ ├── PrometheusPushGatewayReporterOptions.java │ │ │ │ │ ├── PrometheusReporter.java │ │ │ │ │ └── PrometheusReporterFactory.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── NOTICE │ │ │ │ └── services/ │ │ │ │ └── org.apache.flink.metrics.reporter.MetricReporterFactory │ │ │ └── test/ │ │ │ └── resources/ │ │ │ └── log4j2-test.properties │ │ └── pom.xml │ └── pom.xml ├── flink-learning-k8s/ │ ├── README.md │ ├── blogs/ │ │ ├── Flink HA 配置.md │ │ ├── Flink K8s Pod 增加环境变量.md │ │ ├── Kubernetes 入门之知识点梳理.md │ │ ├── Pod 异常问题排查.md │ │ └── 合理设置 Request 与 Limit.md │ ├── dockerfile/ │ │ ├── Dockerfile-Hadoop-Hive │ │ ├── Dockerfile-example-statemachine │ │ ├── Dockerfile-flink-1.12.0-jar │ │ ├── Dockerfile-flink-1.12.0-sql │ │ ├── build_flink_docker_images.sh │ │ ├── build_ingress.sh │ │ ├── docker-entrypoint.sh │ │ └── ingress_template.yaml │ ├── flink-k8s/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── apache/ │ │ │ └── flink/ │ │ │ └── kubernetes/ │ │ │ ├── KubernetesClusterClientFactory.java │ │ │ ├── KubernetesClusterDescriptor.java │ │ │ ├── KubernetesResourceManagerDriver.java │ │ │ ├── KubernetesWorkerNode.java │ │ │ ├── cli/ │ │ │ │ └── KubernetesSessionCli.java │ │ │ ├── configuration/ │ │ │ │ ├── KubernetesConfigOptions.java │ │ │ │ ├── KubernetesConfigOptionsInternal.java │ │ │ │ ├── KubernetesDeploymentTarget.java │ │ │ │ ├── KubernetesHighAvailabilityOptions.java │ │ │ │ ├── KubernetesLeaderElectionConfiguration.java │ │ │ │ └── KubernetesResourceManagerDriverConfiguration.java │ │ │ ├── entrypoint/ │ │ │ │ ├── KubernetesApplicationClusterEntrypoint.java │ │ │ │ ├── KubernetesEntrypointUtils.java │ │ │ │ ├── KubernetesResourceManagerFactory.java │ │ │ │ ├── KubernetesSessionClusterEntrypoint.java │ │ │ │ └── KubernetesWorkerResourceSpecFactory.java │ │ │ ├── executors/ │ │ │ │ ├── KubernetesSessionClusterExecutor.java │ │ │ │ └── KubernetesSessionClusterExecutorFactory.java │ │ │ ├── highavailability/ │ │ │ │ ├── KubernetesCheckpointIDCounter.java │ │ │ │ ├── KubernetesCheckpointRecoveryFactory.java │ │ │ │ ├── KubernetesCheckpointStoreUtil.java │ │ │ │ ├── KubernetesHaServices.java │ │ │ │ ├── KubernetesHaServicesFactory.java │ │ │ │ ├── KubernetesJobGraphStoreUtil.java │ │ │ │ ├── KubernetesLeaderElectionDriver.java │ │ │ │ ├── KubernetesLeaderElectionDriverFactory.java │ │ │ │ ├── KubernetesLeaderRetrievalDriver.java │ │ │ │ ├── KubernetesLeaderRetrievalDriverFactory.java │ │ │ │ ├── KubernetesRunningJobsRegistry.java │ │ │ │ └── KubernetesStateHandleStore.java │ │ │ ├── kubeclient/ │ │ │ │ ├── Endpoint.java │ │ │ │ ├── Fabric8FlinkKubeClient.java │ │ │ │ ├── FlinkKubeClient.java │ │ │ │ ├── FlinkKubeClientFactory.java │ │ │ │ ├── FlinkPod.java │ │ │ │ ├── KubeClientFactory.java │ │ │ │ ├── KubernetesJobManagerSpecification.java │ │ │ │ ├── decorators/ │ │ │ │ │ ├── AbstractKubernetesStepDecorator.java │ │ │ │ │ ├── EnvSecretsDecorator.java │ │ │ │ │ ├── ExternalServiceDecorator.java │ │ │ │ │ ├── FlinkConfMountDecorator.java │ │ │ │ │ ├── HadoopConfMountDecorator.java │ │ │ │ │ ├── HiveConfMountDecorator.java │ │ │ │ │ ├── InitJobManagerDecorator.java │ │ │ │ │ ├── InitTaskManagerDecorator.java │ │ │ │ │ ├── InternalServiceDecorator.java │ │ │ │ │ ├── JavaCmdJobManagerDecorator.java │ │ │ │ │ ├── JavaCmdTaskManagerDecorator.java │ │ │ │ │ ├── KerberosMountDecorator.java │ │ │ │ │ ├── KubernetesStepDecorator.java │ │ │ │ │ └── MountSecretsDecorator.java │ │ │ │ ├── factory/ │ │ │ │ │ ├── KubernetesJobManagerFactory.java │ │ │ │ │ └── KubernetesTaskManagerFactory.java │ │ │ │ ├── parameters/ │ │ │ │ │ ├── AbstractKubernetesParameters.java │ │ │ │ │ ├── KubernetesJobManagerParameters.java │ │ │ │ │ ├── KubernetesParameters.java │ │ │ │ │ └── KubernetesTaskManagerParameters.java │ │ │ │ └── resources/ │ │ │ │ ├── AbstractKubernetesWatcher.java │ │ │ │ ├── KubernetesConfigMap.java │ │ │ │ ├── KubernetesConfigMapWatcher.java │ │ │ │ ├── KubernetesException.java │ │ │ │ ├── KubernetesLeaderElector.java │ │ │ │ ├── KubernetesPod.java │ │ │ │ ├── KubernetesPodsWatcher.java │ │ │ │ ├── KubernetesResource.java │ │ │ │ ├── KubernetesSecretEnvVar.java │ │ │ │ ├── KubernetesService.java │ │ │ │ ├── KubernetesToleration.java │ │ │ │ ├── KubernetesTooOldResourceVersionException.java │ │ │ │ └── KubernetesWatch.java │ │ │ ├── taskmanager/ │ │ │ │ └── KubernetesTaskExecutorRunner.java │ │ │ └── utils/ │ │ │ ├── Constants.java │ │ │ └── KubernetesUtils.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── NOTICE │ │ └── services/ │ │ ├── org.apache.flink.client.deployment.ClusterClientFactory │ │ └── org.apache.flink.core.execution.PipelineExecutorFactory │ └── pom.xml ├── flink-learning-monitor/ │ ├── README.md │ ├── flink-learning-monitor-alert/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── zhisheng/ │ │ │ │ └── alert/ │ │ │ │ ├── alert/ │ │ │ │ │ ├── AsyncIOAlert.java │ │ │ │ │ ├── BroadcastUpdateAlertRule.java │ │ │ │ │ ├── LogEventAlert.java │ │ │ │ │ └── OutageAlert.java │ │ │ │ ├── function/ │ │ │ │ │ ├── AlertRuleAsyncIOFunction.java │ │ │ │ │ ├── GetAlertRuleSourceFunction.java │ │ │ │ │ └── OutageProcessFunction.java │ │ │ │ ├── model/ │ │ │ │ │ ├── AlertEvent.java │ │ │ │ │ ├── AlertRule.java │ │ │ │ │ ├── AtMobiles.java │ │ │ │ │ ├── BaseMessage.java │ │ │ │ │ ├── Email.java │ │ │ │ │ ├── LinkMessage.java │ │ │ │ │ ├── MarkDownMessage.java │ │ │ │ │ ├── MessageType.java │ │ │ │ │ ├── OutageMetricEvent.java │ │ │ │ │ ├── TextMessage.java │ │ │ │ │ └── WorkNotify.java │ │ │ │ ├── utils/ │ │ │ │ │ ├── DingDingAccessTokenUtil.java │ │ │ │ │ ├── DingDingGroupMsgUtil.java │ │ │ │ │ ├── DingDingWorkspaceNoticeUtil.java │ │ │ │ │ ├── EmailNoticeUtil.java │ │ │ │ │ ├── PhoneNoticeUtil.java │ │ │ │ │ └── SMSNoticeUtil.java │ │ │ │ └── watermark/ │ │ │ │ └── OutageMetricWaterMark.java │ │ │ └── resources/ │ │ │ ├── LogEventDataExample.json │ │ │ ├── application.properties │ │ │ └── logback.xml │ │ └── test/ │ │ └── java/ │ │ ├── BuildLogEventDataUtil.java │ │ ├── BuildMachineMetricDataUtil.java │ │ ├── DingDingMsgTest.java │ │ └── LogEventDataExample.java │ ├── flink-learning-monitor-collector/ │ │ ├── README.md │ │ ├── flink_log_event.json │ │ ├── flink_metrics_event.json │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── collector/ │ │ └── FlinkJobMetricCollect.java │ ├── flink-learning-monitor-common/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── common/ │ │ ├── model/ │ │ │ ├── Job.java │ │ │ ├── JobStatus.java │ │ │ └── Task.java │ │ └── utils/ │ │ └── PropertiesUtil.java │ ├── flink-learning-monitor-dashboard/ │ │ ├── README.md │ │ └── pom.xml │ ├── flink-learning-monitor-log/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── zhisheng/ │ │ │ └── log/ │ │ │ ├── LogAlert.java │ │ │ ├── LogMain.java │ │ │ ├── LogSink2ES.java │ │ │ ├── function/ │ │ │ │ └── OriLog2LogEventFlatMapFunction.java │ │ │ ├── model/ │ │ │ │ └── OriginalLogEvent.java │ │ │ ├── schema/ │ │ │ │ └── OriginalLogEventSchema.java │ │ │ └── utils/ │ │ │ ├── ESSinkUtil.java │ │ │ ├── GrokUtil.java │ │ │ └── RetryRequestFailureHandler.java │ │ └── resources/ │ │ ├── application.properties │ │ └── patterns/ │ │ └── patterns │ ├── flink-learning-monitor-pvuv/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── monitor/ │ │ └── pvuv/ │ │ ├── HyperLogLogUvExample.java │ │ ├── MapStateUvExample.java │ │ ├── RedisSetUvExample.java │ │ ├── model/ │ │ │ └── UserVisitWebEvent.java │ │ └── utils/ │ │ └── UvExampleUtil.java │ ├── flink-learning-monitor-storage/ │ │ ├── README.md │ │ ├── flink_log_2es.sql │ │ ├── flink_metrics_2es.sql │ │ └── pom.xml │ ├── flink_monitor_measurements.md │ └── pom.xml ├── flink-learning-project/ │ ├── README.md │ ├── flink-learning-project-common/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── project/ │ │ └── common/ │ │ ├── constant/ │ │ │ └── ProjectConstants.java │ │ ├── model/ │ │ │ ├── AlertEvent.java │ │ │ ├── AlertRule.java │ │ │ ├── PageAccessEvent.java │ │ │ ├── ServerMetric.java │ │ │ └── TransactionEvent.java │ │ └── utils/ │ │ └── ProjectKafkaUtil.java │ ├── flink-learning-project-deduplication/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── project/ │ │ └── deduplication/ │ │ ├── KeyedStateDeduplication.java │ │ ├── TuningKeyedStateDeduplication.java │ │ ├── model/ │ │ │ └── UserVisitWebEvent.java │ │ └── utils/ │ │ └── DeduplicationExampleUtil.java │ ├── flink-learning-project-flink-job-scaffold/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── project/ │ │ └── scaffold/ │ │ └── FlinkJobScaffold.java │ ├── flink-learning-project-log/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── project/ │ │ └── log/ │ │ ├── ErrorLogAlertJob.java │ │ ├── LogAnalysisJob.java │ │ └── model/ │ │ ├── AppLogEvent.java │ │ └── LogStatistics.java │ ├── flink-learning-project-monitor-alert/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── project/ │ │ └── monitor/ │ │ └── alert/ │ │ ├── DynamicAlertRuleJob.java │ │ └── MetricAggregateAlertJob.java │ ├── flink-learning-project-monitor-dashboard/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── project/ │ │ └── dashboard/ │ │ ├── RealTimeDashboardJob.java │ │ ├── TopNHotPagesJob.java │ │ └── model/ │ │ ├── PageViewStats.java │ │ └── TopNResult.java │ ├── flink-learning-project-real-time-computing-platform/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── project/ │ │ └── platform/ │ │ ├── FlinkSqlPlatformJob.java │ │ └── TableApiExampleJob.java │ ├── flink-learning-project-real-time-data-warehouse/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── project/ │ │ └── warehouse/ │ │ ├── DwsOrderStatsJob.java │ │ ├── OdsToKafkaJob.java │ │ └── model/ │ │ ├── OrderDetail.java │ │ └── OrderStats.java │ ├── flink-learning-project-risk-management/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── zhisheng/ │ │ └── project/ │ │ └── risk/ │ │ ├── FraudDetectionCepJob.java │ │ ├── RiskScoreJob.java │ │ └── model/ │ │ └── RiskEvent.java │ └── pom.xml ├── flink-learning-sql/ │ ├── README.md │ ├── flink-learning-sql-blink/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── zhisheng/ │ │ │ │ └── sql/ │ │ │ │ └── blink/ │ │ │ │ └── stream/ │ │ │ │ ├── catalog/ │ │ │ │ │ ├── CatalogAPI.java │ │ │ │ │ └── CatalogTypes.java │ │ │ │ └── example/ │ │ │ │ ├── FlinkSQLDistinctExample.java │ │ │ │ ├── SQLExampleData2PG.java │ │ │ │ ├── SQLExampleKafkaData2ES.java │ │ │ │ ├── SQLExampleKafkaData2HBase.java │ │ │ │ ├── SQLExampleKafkaData2Kafka.java │ │ │ │ ├── SQLExampleKafkaRowData2ES.java │ │ │ │ └── StreamWindowSQLExample.java │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ └── words.txt │ │ └── test/ │ │ └── java/ │ │ └── test/ │ │ └── TableEnvironmentExample1.java │ ├── flink-learning-sql-client/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── zhisheng/ │ │ │ │ └── sql/ │ │ │ │ ├── SqlSubmit.java │ │ │ │ ├── cli/ │ │ │ │ │ ├── CliOptions.java │ │ │ │ │ ├── CliOptionsParser.java │ │ │ │ │ └── SqlCommandParser.java │ │ │ │ ├── constant/ │ │ │ │ │ ├── Constant.java │ │ │ │ │ └── UnitEnum.java │ │ │ │ ├── exception/ │ │ │ │ │ └── SqlParserException.java │ │ │ │ ├── planner/ │ │ │ │ │ ├── BatchPlanner.java │ │ │ │ │ ├── Planner.java │ │ │ │ │ └── StreamingPlanner.java │ │ │ │ └── utils/ │ │ │ │ ├── CloseableRowIteratorWrapper.java │ │ │ │ ├── Config.java │ │ │ │ └── HttpClient.java │ │ │ └── resources/ │ │ │ ├── dev/ │ │ │ │ ├── conf.properties │ │ │ │ └── logback.xml │ │ │ ├── pre/ │ │ │ │ ├── conf.properties │ │ │ │ └── logback.xml │ │ │ ├── prod/ │ │ │ │ ├── conf.properties │ │ │ │ └── logback.xml │ │ │ └── sql/ │ │ │ └── 124563.sql │ │ └── test/ │ │ ├── java/ │ │ │ └── SqlSubmitTest.java │ │ └── resources/ │ │ ├── dev/ │ │ │ ├── conf.properties │ │ │ └── logback.xml │ │ └── sql/ │ │ └── test.sql │ ├── flink-learning-sql-common/ │ │ ├── README.md │ │ └── pom.xml │ └── pom.xml ├── paper/ │ └── paper.md ├── pom.xml └── tree.md