├── LICENSE
├── README.md
├── books
├── Introduction_to_Apache_Flink_book.pdf
├── Learning_Apache_Flink.pdf
├── Stream_Processing_with_Apache_Flink.pdf
└── Streaming_System.pdf
├── flink-learning-cep
├── README.md
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── zhisheng
│ │ └── cep
│ │ └── Main.java
│ └── resources
│ ├── application.properties
│ └── logback.xml
├── flink-learning-common
├── README.md
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── zhisheng
│ │ └── common
│ │ ├── constant
│ │ └── PropertiesConstants.java
│ │ ├── model
│ │ ├── MetricEvent.java
│ │ └── ProductEvent.java
│ │ ├── schemas
│ │ └── MetricSchema.java
│ │ ├── utils
│ │ ├── DateUtil.java
│ │ ├── ExecutionEnvUtil.java
│ │ ├── GsonUtil.java
│ │ ├── HttpUtil.java
│ │ ├── KafkaConfigUtil.java
│ │ └── StringUtil.java
│ │ └── watermarks
│ │ └── MetricWatermark.java
│ └── test
│ └── java
│ └── com
│ └── zhisheng
│ └── common
│ └── utils
│ └── DateUtilTests.java
├── 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-akka
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── zhisheng
│ │ └── connectors
│ │ └── akka
│ │ ├── AkkaSource.java
│ │ └── utils
│ │ ├── ReceiverActor.java
│ │ ├── SubscribeReceiver.java
│ │ └── UnsubscribeReceiver.java
├── flink-learning-connectors-cassandra
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── com
│ │ │ └── zhisheng
│ │ │ └── connectors
│ │ │ └── cassandra
│ │ │ └── Main.java
│ │ └── resources
│ │ ├── application.properties
│ │ └── logback.xml
├── flink-learning-connectors-es6
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── com
│ │ │ └── zhisheng
│ │ │ └── connectors
│ │ │ └── es6
│ │ │ ├── Main.java
│ │ │ └── utils
│ │ │ └── ElasticSearchSinkUtil.java
│ │ └── resources
│ │ ├── application.properties
│ │ └── logback.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-hbase
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── com
│ │ │ └── zhisheng
│ │ │ └── connectors
│ │ │ └── hbase
│ │ │ ├── HBaseReadMain.java
│ │ │ ├── HBaseStreamWriteMain.java
│ │ │ ├── HBaseWriteMain.java
│ │ │ ├── Main.java
│ │ │ └── constant
│ │ │ └── HBaseConstant.java
│ │ └── resources
│ │ ├── application.properties
│ │ └── logback.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-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-kafka
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── com
│ │ │ └── zhisheng
│ │ │ └── connectors
│ │ │ └── kafka
│ │ │ └── Main.java
│ │ └── resources
│ │ ├── application.properties
│ │ └── logback.xml
├── flink-learning-connectors-kudu
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── zhisheng
│ │ └── connectors
│ │ └── kudu
│ │ ├── KuduInputFormat.java
│ │ ├── KuduOutputFormat.java
│ │ ├── KuduSink.java
│ │ ├── connector
│ │ ├── KuduColumnInfo.java
│ │ ├── KuduConnector.java
│ │ ├── KuduFilterInfo.java
│ │ ├── KuduMapper.java
│ │ ├── KuduRow.java
│ │ ├── KuduRowIterator.java
│ │ └── KuduTableInfo.java
│ │ └── serde
│ │ ├── DefaultSerDe.java
│ │ ├── KuduDeserialization.java
│ │ ├── KuduSerialization.java
│ │ └── PojoSerDe.java
├── 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-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-data-sinks
├── README.md
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── zhisheng
│ │ └── data
│ │ └── sinks
│ │ ├── Main.java
│ │ ├── model
│ │ └── Student.java
│ │ ├── sinks
│ │ └── 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-examples
├── README.md
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── zhisheng
│ │ └── examples
│ │ ├── batch
│ │ ├── accumulator
│ │ │ ├── Main.java
│ │ │ └── Main2.java
│ │ └── wordcount
│ │ │ └── Main.java
│ │ ├── streaming
│ │ ├── File
│ │ │ └── Main.java
│ │ ├── async
│ │ │ └── AsyncIOExample.java
│ │ ├── iteration
│ │ │ ├── IterateExample.java
│ │ │ └── util
│ │ │ │ └── IterateExampleData.java
│ │ ├── join
│ │ │ ├── WindowJoin.java
│ │ │ └── WindowJoinSampleData.java
│ │ ├── sideoutput
│ │ │ └── Main.java
│ │ ├── socket
│ │ │ └── Main.java
│ │ └── wordcount
│ │ │ └── Main.java
│ │ └── util
│ │ ├── MySQLUtil.java
│ │ └── ThrottledIterator.java
│ └── resources
│ ├── log4j.properties
│ └── logback.xml
├── flink-learning-monitor
├── README.md
├── flink-learning-monitor-alert
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── zhisheng
│ │ └── alert
│ │ ├── model
│ │ ├── AtMobiles.java
│ │ ├── BaseMessage.java
│ │ ├── Email.java
│ │ ├── LinkMessage.java
│ │ ├── MarkDownMessage.java
│ │ ├── MessageType.java
│ │ ├── TextMessage.java
│ │ └── WorkNotify.java
│ │ └── utils
│ │ ├── DingDingAccessTokenUtil.java
│ │ ├── DingDingGroupMsgUtil.java
│ │ ├── DingDingWorkspaceNoticeUtil.java
│ │ ├── EmailNoticeUtil.java
│ │ ├── PhoneNoticeUtil.java
│ │ └── SMSNoticeUtil.java
├── flink-learning-monitor-collector
│ ├── README.md
│ └── pom.xml
├── 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-storage
│ ├── README.md
│ └── pom.xml
└── pom.xml
├── flink-learning-sql
├── README.md
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── zhisheng
│ │ ├── model
│ │ └── WC.java
│ │ ├── sql
│ │ ├── Sort.java
│ │ └── StreamSQLExample.java
│ │ └── table
│ │ ├── ExplainingTable.java
│ │ └── WordCountTable.java
│ └── resources
│ ├── application.properties
│ └── logback.xml
├── flink-learning-state
├── README.md
└── pom.xml
├── flink-learning-template
├── README.md
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── zhisheng
│ │ └── template
│ │ └── Main.java
│ └── resources
│ ├── application.properties
│ └── logback.xml
├── flink-learning-window
├── README.md
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── zhisheng
│ │ ├── constant
│ │ └── WindowConstant.java
│ │ └── window
│ │ └── Main.java
│ └── resources
│ ├── application.properties
│ └── logback.xml
├── paper
└── paper.md
├── pics
├── Flink-code.png
└── Flink-learning.png
└── pom.xml
/books/Introduction_to_Apache_Flink_book.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InterestingLab/flink-learning/aef361562a703382f5822a671260d9a001d69126/books/Introduction_to_Apache_Flink_book.pdf
--------------------------------------------------------------------------------
/books/Learning_Apache_Flink.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InterestingLab/flink-learning/aef361562a703382f5822a671260d9a001d69126/books/Learning_Apache_Flink.pdf
--------------------------------------------------------------------------------
/books/Stream_Processing_with_Apache_Flink.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InterestingLab/flink-learning/aef361562a703382f5822a671260d9a001d69126/books/Stream_Processing_with_Apache_Flink.pdf
--------------------------------------------------------------------------------
/books/Streaming_System.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InterestingLab/flink-learning/aef361562a703382f5822a671260d9a001d69126/books/Streaming_System.pdf
--------------------------------------------------------------------------------
/flink-learning-cep/README.md:
--------------------------------------------------------------------------------
1 | ## Flink CEP
--------------------------------------------------------------------------------
/flink-learning-cep/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | flink-learning
7 | com.zhisheng.flink
8 | 1.0-SNAPSHOT
9 |
10 | 4.0.0
11 |
12 | flink-learning-cep
13 |
14 |
15 |
16 | com.zhisheng.flink
17 | flink-learning-common
18 | 1.0-SNAPSHOT
19 |
20 |
21 |
22 |
23 |
24 |
25 | org.apache.maven.plugins
26 | maven-shade-plugin
27 | 3.1.0
28 |
29 | false
30 |
31 |
32 |
33 | package
34 |
35 | shade
36 |
37 |
38 |
39 |
40 |
41 |
43 | com.zhisheng.cep.Main
44 |
45 |
47 | reference.conf
48 |
49 |
50 |
51 |
52 | *:*:*:*
53 |
54 | META-INF/*.SF
55 | META-INF/*.DSA
56 | META-INF/*.RSA
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/flink-learning-cep/src/main/java/com/zhisheng/cep/Main.java:
--------------------------------------------------------------------------------
1 | package com.zhisheng.cep;
2 |
3 |
4 | import com.zhisheng.common.model.MetricEvent;
5 | import com.zhisheng.common.utils.ExecutionEnvUtil;
6 | import com.zhisheng.common.utils.KafkaConfigUtil;
7 | import org.apache.flink.api.java.utils.ParameterTool;
8 | import org.apache.flink.streaming.api.datastream.DataStreamSource;
9 | import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
10 |
11 | /**
12 | * blog:http://www.54tianzhisheng.cn/
13 | * 微信公众号:zhisheng
14 | */
15 | public class Main {
16 | public static void main(String[] args) throws Exception{
17 | final ParameterTool parameterTool = ExecutionEnvUtil.createParameterTool(args);
18 | StreamExecutionEnvironment env = ExecutionEnvUtil.prepare(parameterTool);
19 | DataStreamSource data = KafkaConfigUtil.buildSource(env);
20 | data.print();
21 |
22 | env.execute("flink learning cep");
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/flink-learning-cep/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | kafka.brokers=localhost:9092
2 | kafka.group.id=metrics-group
3 | kafka.zookeeper.connect=localhost:2181
4 | metrics.topic=alert-metrics
5 | stream.parallelism=5
6 | stream.checkpoint.interval=1000
7 | stream.checkpoint.enable=false
--------------------------------------------------------------------------------
/flink-learning-cep/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/flink-learning-common/README.md:
--------------------------------------------------------------------------------
1 | ### Flink-learning-common
2 |
3 | 这个模块存放通用的代码(实体类、工具类、常量类)
--------------------------------------------------------------------------------
/flink-learning-common/src/main/java/com/zhisheng/common/constant/PropertiesConstants.java:
--------------------------------------------------------------------------------
1 | package com.zhisheng.common.constant;
2 |
3 |
4 | /**
5 | * blog:http://www.54tianzhisheng.cn/
6 | * 微信公众号:zhisheng
7 | */
8 | public class PropertiesConstants {
9 | public static final String ZHISHENG = "zhisheng";
10 | public static final String KAFKA_BROKERS = "kafka.brokers";
11 | public static final String DEFAULT_KAFKA_BROKERS = "localhost:9092";
12 | public static final String KAFKA_ZOOKEEPER_CONNECT = "kafka.zookeeper.connect";
13 | public static final String DEFAULT_KAFKA_ZOOKEEPER_CONNECT = "localhost:2181";
14 | public static final String KAFKA_GROUP_ID = "kafka.group.id";
15 | public static final String DEFAULT_KAFKA_GROUP_ID = "zhisheng";
16 | public static final String METRICS_TOPIC = "metrics.topic";
17 | public static final String CONSUMER_FROM_TIME = "consumer.from.time";
18 | public static final String STREAM_PARALLELISM = "stream.parallelism";
19 | public static final String STREAM_SINK_PARALLELISM = "stream.sink.parallelism";
20 | public static final String STREAM_DEFAULT_PARALLELISM = "stream.default.parallelism";
21 | public static final String STREAM_CHECKPOINT_ENABLE = "stream.checkpoint.enable";
22 | public static final String STREAM_CHECKPOINT_INTERVAL = "stream.checkpoint.interval";
23 | public static final String PROPERTIES_FILE_NAME = "/application.properties";
24 |
25 | //es config
26 | public static final String ELASTICSEARCH_BULK_FLUSH_MAX_ACTIONS = "elasticsearch.bulk.flush.max.actions";
27 | public static final String ELASTICSEARCH_HOSTS = "elasticsearch.hosts";
28 |
29 | //mysql
30 | public static final String MYSQL_DATABASE = "mysql.database";
31 | public static final String MYSQL_HOST = "mysql.host";
32 | public static final String MYSQL_PASSWORD = "mysql.password";
33 | public static final String MYSQL_PORT = "mysql.port";
34 | public static final String MYSQL_USERNAME = "mysql.username";
35 | }
36 |
--------------------------------------------------------------------------------
/flink-learning-common/src/main/java/com/zhisheng/common/model/MetricEvent.java:
--------------------------------------------------------------------------------
1 | package com.zhisheng.common.model;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.Map;
9 |
10 | /**
11 | * blog:http://www.54tianzhisheng.cn/
12 | * 微信公众号:zhisheng
13 | */
14 |
15 | @Data
16 | @Builder
17 | @AllArgsConstructor
18 | @NoArgsConstructor
19 | public class MetricEvent {
20 |
21 | /**
22 | * Metric name
23 | */
24 | private String name;
25 |
26 | /**
27 | * Metric timestamp
28 | */
29 | private Long timestamp;
30 |
31 | /**
32 | * Metric fields
33 | */
34 | private Map fields;
35 |
36 | /**
37 | * Metric tags
38 | */
39 | private Map tags;
40 | }
41 |
--------------------------------------------------------------------------------
/flink-learning-common/src/main/java/com/zhisheng/common/model/ProductEvent.java:
--------------------------------------------------------------------------------
1 | package com.zhisheng.common.model;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * Desc: 商品
12 | * Created by zhisheng on 2019-04-18
13 | * blog:http://www.54tianzhisheng.cn/
14 | * 微信公众号:zhisheng
15 | */
16 | @Data
17 | @Builder
18 | @AllArgsConstructor
19 | @NoArgsConstructor
20 | public class ProductEvent {
21 |
22 | /**
23 | * Product Id
24 | */
25 | private Long id;
26 |
27 | /**
28 | * Product 类目 Id
29 | */
30 | private Long categoryId;
31 |
32 | /**
33 | * Product 编码
34 | */
35 | private String code;
36 |
37 | /**
38 | * Product 店铺 Id
39 | */
40 | private Long shopId;
41 |
42 | /**
43 | * Product 店铺 name
44 | */
45 | private String shopName;
46 |
47 | /**
48 | * Product 品牌 Id
49 | */
50 | private Long brandId;
51 |
52 | /**
53 | * Product 品牌 name
54 | */
55 | private String brandName;
56 |
57 | /**
58 | * Product name
59 | */
60 | private String name;
61 |
62 | /**
63 | * Product 图片地址
64 | */
65 | private String imageUrl;
66 |
67 | /**
68 | * Product 状态(1(上架),-1(下架),-2(冻结),-3(删除))
69 | */
70 | private int status;
71 |
72 | /**
73 | * Product 类型
74 | */
75 | private int type;
76 |
77 | /**
78 | * Product 标签
79 | */
80 | private List tags;
81 |
82 | /**
83 | * Product 价格(以分为单位)
84 | */
85 | private Long price;
86 | }
87 |
--------------------------------------------------------------------------------
/flink-learning-common/src/main/java/com/zhisheng/common/schemas/MetricSchema.java:
--------------------------------------------------------------------------------
1 | package com.zhisheng.common.schemas;
2 |
3 | import com.google.gson.Gson;
4 | import com.zhisheng.common.model.MetricEvent;
5 | import org.apache.flink.api.common.serialization.DeserializationSchema;
6 | import org.apache.flink.api.common.serialization.SerializationSchema;
7 | import org.apache.flink.api.common.typeinfo.TypeInformation;
8 |
9 | import java.io.IOException;
10 | import java.nio.charset.Charset;
11 |
12 | /**
13 | * Metric Schema ,支持序列化和反序列化
14 | *
15 | * blog:http://www.54tianzhisheng.cn/
16 | * 微信公众号:zhisheng
17 | *
18 | */
19 | public class MetricSchema implements DeserializationSchema, SerializationSchema {
20 |
21 | private static final Gson gson = new Gson();
22 |
23 | @Override
24 | public MetricEvent deserialize(byte[] bytes) throws IOException {
25 | return gson.fromJson(new String(bytes), MetricEvent.class);
26 | }
27 |
28 | @Override
29 | public boolean isEndOfStream(MetricEvent metricEvent) {
30 | return false;
31 | }
32 |
33 | @Override
34 | public byte[] serialize(MetricEvent metricEvent) {
35 | return gson.toJson(metricEvent).getBytes(Charset.forName("UTF-8"));
36 | }
37 |
38 | @Override
39 | public TypeInformation getProducedType() {
40 | return TypeInformation.of(MetricEvent.class);
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/flink-learning-common/src/main/java/com/zhisheng/common/utils/ExecutionEnvUtil.java:
--------------------------------------------------------------------------------
1 | package com.zhisheng.common.utils;
2 |
3 | import com.zhisheng.common.constant.PropertiesConstants;
4 | import org.apache.flink.api.common.restartstrategy.RestartStrategies;
5 | import org.apache.flink.api.java.utils.ParameterTool;
6 | import org.apache.flink.streaming.api.TimeCharacteristic;
7 | import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
8 |
9 | import java.io.IOException;
10 | import java.util.HashMap;
11 | import java.util.Map;
12 |
13 | /**
14 | * blog:http://www.54tianzhisheng.cn/
15 | * 微信公众号:zhisheng
16 | */
17 | public class ExecutionEnvUtil {
18 | public static ParameterTool createParameterTool(final String[] args) throws Exception {
19 | return ParameterTool
20 | .fromPropertiesFile(ExecutionEnvUtil.class.getResourceAsStream(PropertiesConstants.PROPERTIES_FILE_NAME))
21 | .mergeWith(ParameterTool.fromArgs(args))
22 | .mergeWith(ParameterTool.fromSystemProperties())
23 | .mergeWith(ParameterTool.fromMap(getenv()));
24 | }
25 |
26 | public static final ParameterTool PARAMETER_TOOL = createParameterTool();
27 |
28 | private static ParameterTool createParameterTool() {
29 | try {
30 | return ParameterTool
31 | .fromPropertiesFile(ExecutionEnvUtil.class.getResourceAsStream(PropertiesConstants.PROPERTIES_FILE_NAME))
32 | .mergeWith(ParameterTool.fromSystemProperties())
33 | .mergeWith(ParameterTool.fromMap(getenv()));
34 | } catch (IOException e) {
35 | e.printStackTrace();
36 | }
37 | return null;
38 | }
39 |
40 | public static StreamExecutionEnvironment prepare(ParameterTool parameterTool) throws Exception {
41 | StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
42 | env.setParallelism(parameterTool.getInt(PropertiesConstants.STREAM_PARALLELISM, 5));
43 | env.getConfig().disableSysoutLogging();
44 | env.getConfig().setRestartStrategy(RestartStrategies.fixedDelayRestart(4, 10000));
45 | if (parameterTool.getBoolean(PropertiesConstants.STREAM_CHECKPOINT_ENABLE, true)) {
46 | env.enableCheckpointing(parameterTool.getInt(PropertiesConstants.STREAM_CHECKPOINT_INTERVAL, 1000)); // create a checkpoint every 5 seconds
47 | }
48 | env.getConfig().setGlobalJobParameters(parameterTool); // make parameters available in the web interface
49 | env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
50 | return env;
51 | }
52 |
53 | private static Map getenv() {
54 | Map map = new HashMap<>();
55 | for (Map.Entry entry : System.getenv().entrySet()) {
56 | map.put(entry.getKey(), entry.getValue());
57 | }
58 | return map;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/flink-learning-common/src/main/java/com/zhisheng/common/utils/GsonUtil.java:
--------------------------------------------------------------------------------
1 | package com.zhisheng.common.utils;
2 |
3 | import com.google.gson.Gson;
4 |
5 | import java.nio.charset.Charset;
6 |
7 | /**
8 | * blog:http://www.54tianzhisheng.cn/
9 | * 微信公众号:zhisheng
10 | */
11 | public class GsonUtil {
12 | private final static Gson gson = new Gson();
13 |
14 | public static T fromJson(String value, Class type) {
15 | return gson.fromJson(value, type);
16 | }
17 |
18 | public static String toJson(Object value) {
19 | return gson.toJson(value);
20 | }
21 |
22 | public static byte[] toJSONBytes(Object value) {
23 | return gson.toJson(value).getBytes(Charset.forName("UTF-8"));
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/flink-learning-common/src/main/java/com/zhisheng/common/utils/StringUtil.java:
--------------------------------------------------------------------------------
1 | package com.zhisheng.common.utils;
2 |
3 | /**
4 | * blog:http://www.54tianzhisheng.cn/
5 | * 微信公众号:zhisheng
6 | */
7 | public class StringUtil {
8 | /**
9 | * 判空
10 | *
11 | * @param str
12 | * @return
13 | */
14 | public static boolean isEmpty(String str) {
15 | return str == null || str.trim().length() == 0;
16 | }
17 |
18 | /**
19 | * 判非空
20 | *
21 | * @param str
22 | * @return
23 | */
24 | public static boolean isNotEmpty(String str) {
25 | return !isEmpty(str);
26 | }
27 |
28 | /**
29 | * 包含
30 | *
31 | * @param str1
32 | * @param str2
33 | * @return
34 | */
35 | public static boolean isContains(String str1, String str2) {
36 | return str1.contains(str2);
37 | }
38 |
39 | /**
40 | * 不包含
41 | *
42 | * @param str1
43 | * @param str2
44 | * @return
45 | */
46 | public static boolean isNotContains(String str1, String str2) {
47 | return !isContains(str1, str2);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/flink-learning-common/src/main/java/com/zhisheng/common/watermarks/MetricWatermark.java:
--------------------------------------------------------------------------------
1 | package com.zhisheng.common.watermarks;
2 |
3 | import com.zhisheng.common.model.MetricEvent;
4 | import org.apache.flink.streaming.api.functions.AssignerWithPeriodicWatermarks;
5 | import org.apache.flink.streaming.api.watermark.Watermark;
6 |
7 | import javax.annotation.Nullable;
8 |
9 | /**
10 | * blog:http://www.54tianzhisheng.cn/
11 | * 微信公众号:zhisheng
12 | */
13 | public class MetricWatermark implements AssignerWithPeriodicWatermarks {
14 |
15 | private long currentTimestamp = Long.MIN_VALUE;
16 |
17 | @Override
18 | public long extractTimestamp(MetricEvent metricEvent, long previousElementTimestamp) {
19 | if (metricEvent.getTimestamp() > currentTimestamp) {
20 | this.currentTimestamp = metricEvent.getTimestamp();
21 | }
22 | return currentTimestamp;
23 | }
24 |
25 | @Nullable
26 | @Override
27 | public Watermark getCurrentWatermark() {
28 | long maxTimeLag = 5000;
29 | return new Watermark(currentTimestamp == Long.MIN_VALUE ? Long.MIN_VALUE : currentTimestamp - maxTimeLag);
30 |
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/flink-learning-connectors/README.md:
--------------------------------------------------------------------------------
1 | ### Flink connectors
2 |
3 | 暂时有这些 Cooncetor,其中这些并不是 Flink 自带的,需要自己定义,另外提供这些 Connector 的使用案例,大家可以参考。欢迎补充和点赞
4 |
5 | ```text
6 | .
7 | ├── flink-learning-connectors-activemq
8 | ├── flink-learning-connectors-akka
9 | ├── flink-learning-connectors-cassandra
10 | ├── flink-learning-connectors-es6
11 | ├── flink-learning-connectors-flume
12 | ├── flink-learning-connectors-hbase
13 | ├── flink-learning-connectors-hdfs
14 | ├── flink-learning-connectors-influxdb
15 | ├── flink-learning-connectors-kafka
16 | ├── flink-learning-connectors-kudu
17 | ├── flink-learning-connectors-mysql
18 | ├── flink-learning-connectors-netty
19 | ├── flink-learning-connectors-rabbitmq
20 | ├── flink-learning-connectors-redis
21 | └── flink-learning-connectors-rocketmq
22 | ```
--------------------------------------------------------------------------------
/flink-learning-connectors/flink-learning-connectors-activemq/README.md:
--------------------------------------------------------------------------------
1 | 模版项目,不做任何代码编写,方便创建新的 module 时复制
--------------------------------------------------------------------------------
/flink-learning-connectors/flink-learning-connectors-activemq/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | flink-learning-connectors
7 | com.zhisheng.flink
8 | 1.0-SNAPSHOT
9 |
10 | 4.0.0
11 |
12 | flink-learning-connectors-activemq
13 |
14 |
15 |
16 |
17 | org.apache.maven.plugins
18 | maven-shade-plugin
19 | 3.1.0
20 |
21 | false
22 |
23 |
24 |
25 | package
26 |
27 | shade
28 |
29 |
30 |
31 |
32 |
33 |
35 | com.zhisheng.connectors.activemq.Main
36 |
37 |
39 | reference.conf
40 |
41 |
42 |
43 |
44 | *:*:*:*
45 |
46 | META-INF/*.SF
47 | META-INF/*.DSA
48 | META-INF/*.RSA
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/flink-learning-connectors/flink-learning-connectors-activemq/src/main/java/com/zhisheng/connectors/activemq/Main.java:
--------------------------------------------------------------------------------
1 | package com.zhisheng.connectors.activemq;
2 |
3 |
4 | import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
5 |
6 | public class Main {
7 | public static void main(String[] args) throws Exception {
8 | final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
9 |
10 | env.execute("flink learning project template");
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/flink-learning-connectors/flink-learning-connectors-activemq/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | kafka.brokers=localhost:9092
2 | kafka.group.id=zhisheng
3 | kafka.zookeeper.connect=localhost:2181
4 | metrics.topic=zhisheng
5 | stream.parallelism=4
6 | stream.sink.parallelism=4
7 | stream.default.parallelism=4
8 | stream.checkpoint.interval=1000
9 | stream.checkpoint.enable=false
--------------------------------------------------------------------------------
/flink-learning-connectors/flink-learning-connectors-activemq/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/flink-learning-connectors/flink-learning-connectors-akka/README.md:
--------------------------------------------------------------------------------
1 | ### Flink connector akka
2 |
3 |
--------------------------------------------------------------------------------
/flink-learning-connectors/flink-learning-connectors-akka/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | flink-learning-connectors
7 | com.zhisheng.flink
8 | 1.0-SNAPSHOT
9 |
10 | 4.0.0
11 |
12 | flink-learning-connectors-akka
13 |
14 |
15 |
16 | com.zhisheng.flink
17 | flink-learning-common
18 | 1.0-SNAPSHOT
19 |
20 |
21 |
--------------------------------------------------------------------------------
/flink-learning-connectors/flink-learning-connectors-akka/src/main/java/com/zhisheng/connectors/akka/utils/ReceiverActor.java:
--------------------------------------------------------------------------------
1 | package com.zhisheng.connectors.akka.utils;
2 |
3 | import akka.actor.ActorRef;
4 | import akka.actor.ActorSelection;
5 | import akka.actor.UntypedActor;
6 | import org.apache.flink.api.java.tuple.Tuple2;
7 | import org.apache.flink.streaming.api.functions.source.SourceFunction.SourceContext;
8 |
9 | import java.util.Iterator;
10 |
11 | /**
12 | * Desc:
13 | * Created by zhisheng on 2019-06-08
14 | * blog:http://www.54tianzhisheng.cn/
15 | * 微信公众号:zhisheng
16 | */
17 | public class ReceiverActor extends UntypedActor {
18 | // --- Fields set by the constructor
19 | private final SourceContext