From 51ff842057c213dc0c22296692f60a37f39d0c07 Mon Sep 17 00:00:00 2001 From: leeegeng <52368324+leeegeng@users.noreply.github.com> Date: Mon, 16 Aug 2021 13:24:47 +0800 Subject: [PATCH] commit sample for use flink --- .idea/.gitignore | 8 + .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/compiler.xml | 17 ++ .idea/encodings.xml | 7 + .idea/jarRepositories.xml | 20 ++ ...__ch_qos_logback_logback_classic_1_2_4.xml | 13 + ...ven__ch_qos_logback_logback_core_1_2_4.xml | 13 + ..._com_esotericsoftware_kryo_kryo_2_24_0.xml | 13 + ...com_esotericsoftware_minlog_minlog_1_2.xml | 13 + ...ackson_core_jackson_annotations_2_12_4.xml | 13 + ...erxml_jackson_core_jackson_core_2_12_4.xml | 13 + ...l_jackson_core_jackson_databind_2_12_4.xml | 13 + ..._datatype_jackson_datatype_jdk8_2_12_4.xml | 13 + ...atatype_jackson_datatype_jsr310_2_12_4.xml | 13 + ..._jackson_module_parameter_names_2_12_4.xml | 13 + ...ven__com_github_luben_zstd_jni_1_4_3_1.xml | 13 + ...ven__com_github_scopt_scopt_2_11_3_5_0.xml | 13 + ..._com_google_code_findbugs_jsr305_1_3_9.xml | 13 + .../Maven__com_twitter_chill_2_11_0_7_6.xml | 13 + .../Maven__com_twitter_chill_java_0_7_6.xml | 13 + ...m_typesafe_akka_akka_actor_2_11_2_5_21.xml | 13 + ...ypesafe_akka_akka_protobuf_2_11_2_5_21.xml | 13 + ...m_typesafe_akka_akka_slf4j_2_11_2_5_21.xml | 13 + ..._typesafe_akka_akka_stream_2_11_2_5_21.xml | 13 + .../Maven__com_typesafe_config_1_3_3.xml | 13 + ...om_typesafe_ssl_config_core_2_11_0_3_7.xml | 13 + .../Maven__commons_cli_commons_cli_1_3_1.xml | 13 + ..._collections_commons_collections_3_2_2.xml | 13 + .../Maven__commons_io_commons_io_2_7.xml | 13 + ...nnotation_jakarta_annotation_api_1_3_5.xml | 13 + ...he_calcite_avatica_avatica_core_1_17_0.xml | 13 + ...g_apache_commons_commons_compress_1_20.xml | 13 + ...org_apache_commons_commons_lang3_3_3_2.xml | 13 + ...__org_apache_commons_commons_math3_3_5.xml | 13 + ..._apache_flink_flink_annotations_1_13_0.xml | 13 + ...apache_flink_flink_clients_2_11_1_13_0.xml | 13 + ...ache_flink_flink_connector_base_1_13_0.xml | 13 + ...che_flink_flink_connector_files_1_13_0.xml | 13 + ...link_flink_connector_kafka_2_11_1_13_0.xml | 13 + ...en__org_apache_flink_flink_core_1_13_0.xml | 13 + ...he_flink_flink_file_sink_common_1_13_0.xml | 13 + ...rg_apache_flink_flink_hadoop_fs_1_13_0.xml | 13 + ...en__org_apache_flink_flink_java_1_13_0.xml | 13 + ...apache_flink_flink_metrics_core_1_13_0.xml | 13 + ...ache_flink_flink_optimizer_2_11_1_13_0.xml | 13 + ...ink_queryable_state_client_java_1_13_0.xml | 13 + ...apache_flink_flink_runtime_2_11_1_13_0.xml | 13 + ...g_apache_flink_flink_scala_2_11_1_13_0.xml | 13 + ...ache_flink_flink_shaded_asm_7_7_1_13_0.xml | 13 + ...che_flink_flink_shaded_guava_18_0_13_0.xml | 13 + ...flink_flink_shaded_jackson_2_12_1_13_0.xml | 13 + ...k_flink_shaded_netty_4_1_49_Final_13_0.xml | 13 + ...k_flink_shaded_zookeeper_3_3_4_14_13_0.xml | 13 + ...flink_flink_streaming_java_2_11_1_13_0.xml | 13 + ...link_flink_streaming_scala_2_11_1_13_0.xml | 13 + ...ache_flink_flink_table_api_java_1_13_0.xml | 13 + ...link_table_api_java_bridge_2_11_1_13_0.xml | 13 + ...link_flink_table_api_scala_2_11_1_13_0.xml | 13 + ...ink_table_api_scala_bridge_2_11_1_13_0.xml | 13 + ...apache_flink_flink_table_common_1_13_0.xml | 13 + ..._flink_flink_table_planner_2_11_1_13_0.xml | 13 + ..._flink_table_planner_blink_2_11_1_13_0.xml | 13 + ..._flink_table_runtime_blink_2_11_1_13_0.xml | 13 + ...k_flink_walkthrough_common_2_11_1_13_0.xml | 13 + ..._org_apache_flink_force_shading_1_13_0.xml | 13 + ...__org_apache_kafka_kafka_clients_2_4_1.xml | 13 + ..._apache_logging_log4j_log4j_api_2_12_1.xml | 13 + ...apache_logging_log4j_log4j_core_2_12_1.xml | 13 + ..._logging_log4j_log4j_slf4j_impl_2_12_1.xml | 13 + ...he_logging_log4j_log4j_to_slf4j_2_14_1.xml | 13 + ..._tomcat_embed_tomcat_embed_core_9_0_50.xml | 13 + ...he_tomcat_embed_tomcat_embed_el_9_0_50.xml | 13 + ...at_embed_tomcat_embed_websocket_9_0_50.xml | 13 + ..._org_clapper_grizzled_slf4j_2_11_1_3_2.xml | 13 + ...odehaus_janino_commons_compiler_3_0_11.xml | 13 + ...ven__org_codehaus_janino_janino_3_0_11.xml | 13 + ...ven__org_javassist_javassist_3_24_0_GA.xml | 13 + .../Maven__org_lz4_lz4_java_1_6_0.xml | 13 + .../Maven__org_objenesis_objenesis_2_1.xml | 13 + ...aven__org_projectlombok_lombok_1_18_20.xml | 13 + ...reactivestreams_reactive_streams_1_0_2.xml | 13 + ..._modules_scala_java8_compat_2_11_0_7_0.xml | 13 + ...es_scala_parser_combinators_2_11_1_0_4.xml | 13 + ...cala_lang_modules_scala_xml_2_11_1_0_5.xml | 13 + ..._org_scala_lang_scala_compiler_2_11_12.xml | 13 + ...__org_scala_lang_scala_library_2_11_12.xml | 13 + ...__org_scala_lang_scala_reflect_2_11_12.xml | 13 + .../Maven__org_slf4j_jul_to_slf4j_1_7_32.xml | 13 + .../Maven__org_slf4j_slf4j_api_1_7_15.xml | 13 + ...springframework_boot_spring_boot_2_5_3.xml | 13 + ...k_boot_spring_boot_autoconfigure_2_5_3.xml | 13 + ...amework_boot_spring_boot_starter_2_5_3.xml | 13 + ...rk_boot_spring_boot_starter_json_2_5_3.xml | 13 + ...boot_spring_boot_starter_logging_2_5_3.xml | 13 + ..._boot_spring_boot_starter_tomcat_2_5_3.xml | 13 + ...ork_boot_spring_boot_starter_web_2_5_3.xml | 13 + ...__org_springframework_spring_aop_5_3_8.xml | 13 + ...org_springframework_spring_beans_5_3_8.xml | 13 + ...g_springframework_spring_context_5_3_8.xml | 13 + ..._org_springframework_spring_core_5_3_8.xml | 13 + ...pringframework_spring_expression_5_3_8.xml | 13 + ...__org_springframework_spring_jcl_5_3_8.xml | 13 + ...__org_springframework_spring_web_5_3_9.xml | 13 + ...rg_springframework_spring_webmvc_5_3_9.xml | 13 + ..._org_xerial_snappy_snappy_java_1_1_8_3.xml | 13 + .../Maven__org_yaml_snakeyaml_1_28.xml | 13 + .idea/misc.xml | 13 + .idea/modules.xml | 8 + data.txt/1 | 39 +++ data.txt/2 | 39 +++ data.txt/3 | 39 +++ data.txt/4 | 38 +++ data.txt/5 | 38 +++ data.txt/6 | 39 +++ data.txt/7 | 39 +++ data.txt/8 | 39 +++ flink-test.iml | 86 ++++++ pom.xml | 127 +++++++++ .../function/StatusStatisticsByDay.java | 159 +++++++++++ .../apitest/function/TopNFunction.java | 161 +++++++++++ .../kedacom/apitest/sink/KafkaSinkTest.java | 62 +++++ .../apitest/source/DeviceInfoReading.java | 30 ++ .../apitest/source/KafkaSourceTest.java | 55 ++++ .../kedacom/apitest/source/ReduceTest.java | 60 ++++ .../apitest/source/SelfSourceTest.java | 76 +++++ .../apitest/source/SplitStreamTest.java | 103 +++++++ .../state/KeyedStateApplicationTest.java | 88 ++++++ .../kedacom/apitest/state/KeyedStateTest.java | 64 +++++ .../apitest/state/OpetateStateTest.java | 87 ++++++ .../kedacom/apitest/tableapi/TableTest1.java | 73 +++++ .../udf/UdfAggregateFunctionTest.java | 75 +++++ .../tableapi/udf/UdfScalarFunctionTest.java | 63 +++++ .../tableapi/udf/UdfTableFunctionTest.java | 70 +++++ .../apitest/window/SocketWindowTest.java | 115 ++++++++ .../kedacom/apitest/window/WatermarkTest.java | 262 ++++++++++++++++++ .../kedacom/apitest/window/WindowTest1.java | 116 ++++++++ .../java/com/kedacom/pojo/CarNumCount.java | 14 + .../java/com/kedacom/pojo/DeviceInfo.java | 16 ++ .../com/kedacom/pojo/DeviceStatusStt.java | 16 ++ .../java/com/kedacom/wc/SocketWordCount.java | 52 ++++ .../java/com/kedacom/wc/StreamWordCount.java | 42 +++ src/main/java/com/kedacom/wc/WordCount.java | 35 +++ src/main/resources/carnum.txt | 12 + src/main/resources/deviceinfo.txt | 12 + src/main/resources/hello.txt | 6 + src/main/resources/log4j2.properties | 28 ++ target/classes/carnum.txt | 12 + .../function/StatusStatisticsByDay$1.class | Bin 0 -> 1188 bytes ...tatusStatisticsByDay$ProcessDayStt$1.class | Bin 0 -> 1692 bytes .../StatusStatisticsByDay$ProcessDayStt.class | Bin 0 -> 6467 bytes .../function/StatusStatisticsByDay.class | Bin 0 -> 6996 bytes .../apitest/function/TopNFunction$1.class | Bin 0 -> 1014 bytes .../function/TopNFunction$CarCountAgg.class | Bin 0 -> 1815 bytes .../function/TopNFunction$ResultWindow.class | Bin 0 -> 2540 bytes .../TopNFunction$TopNHotCarNum$1.class | Bin 0 -> 1590 bytes .../function/TopNFunction$TopNHotCarNum.class | Bin 0 -> 5745 bytes .../apitest/function/TopNFunction.class | Bin 0 -> 6557 bytes .../sink/KafkaSinkTest$DeviceSource.class | Bin 0 -> 3034 bytes .../kedacom/apitest/sink/KafkaSinkTest.class | Bin 0 -> 3929 bytes .../apitest/source/DeviceInfoReading.class | Bin 0 -> 2260 bytes .../apitest/source/KafkaSourceTest.class | Bin 0 -> 4868 bytes .../source/ReduceTest$DeviceSource.class | Bin 0 -> 3028 bytes .../kedacom/apitest/source/ReduceTest.class | Bin 0 -> 5111 bytes .../source/SelfSourceTest$DeviceSource.class | Bin 0 -> 3044 bytes .../apitest/source/SelfSourceTest.class | Bin 0 -> 5043 bytes .../apitest/source/SplitStreamTest$1.class | Bin 0 -> 2282 bytes .../apitest/source/SplitStreamTest$2.class | Bin 0 -> 1639 bytes .../apitest/source/SplitStreamTest$3.class | Bin 0 -> 2076 bytes .../source/SplitStreamTest$DeviceSource.class | Bin 0 -> 3048 bytes .../apitest/source/SplitStreamTest.class | Bin 0 -> 4215 bytes ...ateApplicationTest$StatusSttFunction.class | Bin 0 -> 3296 bytes .../state/KeyedStateApplicationTest.class | Bin 0 -> 4796 bytes .../state/KeyedStateTest$MyKeyedState.class | Bin 0 -> 2598 bytes .../apitest/state/KeyedStateTest.class | Bin 0 -> 4244 bytes .../state/OpetateStateTest$CountMapper.class | Bin 0 -> 2177 bytes .../OpetateStateTest$MyCountMapper.class | Bin 0 -> 2451 bytes .../apitest/state/OpetateStateTest.class | Bin 0 -> 4899 bytes .../apitest/tableapi/TableTest1$1.class | Bin 0 -> 1144 bytes .../kedacom/apitest/tableapi/TableTest1.class | Bin 0 -> 7883 bytes ...fAggregateFunctionTest$AverageCarNum.class | Bin 0 -> 2324 bytes .../udf/UdfAggregateFunctionTest.class | Bin 0 -> 5857 bytes .../udf/UdfScalarFunctionTest$HashCode.class | Bin 0 -> 759 bytes .../tableapi/udf/UdfScalarFunctionTest.class | Bin 0 -> 5488 bytes .../udf/UdfTableFunctionTest$SplitName.class | Bin 0 -> 1353 bytes .../tableapi/udf/UdfTableFunctionTest.class | Bin 0 -> 5619 bytes .../apitest/window/SocketWindowTest$1.class | Bin 0 -> 1395 bytes .../apitest/window/SocketWindowTest$2.class | Bin 0 -> 3361 bytes .../apitest/window/SocketWindowTest$3.class | Bin 0 -> 1162 bytes .../apitest/window/SocketWindowTest.class | Bin 0 -> 5497 bytes .../window/WatermarkTest$CarCountAgg.class | Bin 0 -> 1813 bytes .../window/WatermarkTest$DeviceSource.class | Bin 0 -> 3054 bytes .../WatermarkTest$MyTimeAssigner$1.class | Bin 0 -> 1592 bytes .../window/WatermarkTest$MyTimeAssigner.class | Bin 0 -> 1385 bytes ...rmarkTest$MyTimestampAndWatermarks$1.class | Bin 0 -> 2414 bytes ...termarkTest$MyTimestampAndWatermarks.class | Bin 0 -> 1496 bytes .../window/WatermarkTest$ResultWindow.class | Bin 0 -> 2538 bytes .../WatermarkTest$TopNHotCarNum$1.class | Bin 0 -> 1585 bytes .../window/WatermarkTest$TopNHotCarNum.class | Bin 0 -> 5856 bytes .../apitest/window/WatermarkTest.class | Bin 0 -> 5115 bytes .../apitest/window/WindowTest1$1.class | Bin 0 -> 1834 bytes .../apitest/window/WindowTest1$2.class | Bin 0 -> 3630 bytes .../window/WindowTest1$DeviceSource.class | Bin 0 -> 3042 bytes .../kedacom/apitest/window/WindowTest1.class | Bin 0 -> 5217 bytes .../com/kedacom/pojo/CarNumCount.class | Bin 0 -> 2436 bytes .../classes/com/kedacom/pojo/DeviceInfo.class | Bin 0 -> 2413 bytes .../com/kedacom/pojo/DeviceStatusStt.class | Bin 0 -> 2819 bytes .../wc/SocketWordCount$MyFlatMap.class | Bin 0 -> 1890 bytes .../com/kedacom/wc/SocketWordCount.class | Bin 0 -> 3096 bytes .../wc/StreamWordCount$MyFlatMap.class | Bin 0 -> 1890 bytes .../com/kedacom/wc/StreamWordCount.class | Bin 0 -> 2420 bytes .../com/kedacom/wc/WordCount$MyFlatMap.class | Bin 0 -> 1866 bytes target/classes/com/kedacom/wc/WordCount.class | Bin 0 -> 1923 bytes target/classes/deviceinfo.txt | 12 + target/classes/hello.txt | 6 + target/classes/log4j2.properties | 28 ++ target/flink-test-1.0-SNAPSHOT.jar | Bin 0 -> 99166 bytes target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 65 +++++ .../compile/default-compile/inputFiles.lst | 24 ++ .../default-testCompile/inputFiles.lst | 0 220 files changed, 4018 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_4.xml create mode 100644 .idea/libraries/Maven__ch_qos_logback_logback_core_1_2_4.xml create mode 100644 .idea/libraries/Maven__com_esotericsoftware_kryo_kryo_2_24_0.xml create mode 100644 .idea/libraries/Maven__com_esotericsoftware_minlog_minlog_1_2.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_12_4.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_12_4.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_12_4.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_12_4.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_12_4.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_12_4.xml create mode 100644 .idea/libraries/Maven__com_github_luben_zstd_jni_1_4_3_1.xml create mode 100644 .idea/libraries/Maven__com_github_scopt_scopt_2_11_3_5_0.xml create mode 100644 .idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml create mode 100644 .idea/libraries/Maven__com_twitter_chill_2_11_0_7_6.xml create mode 100644 .idea/libraries/Maven__com_twitter_chill_java_0_7_6.xml create mode 100644 .idea/libraries/Maven__com_typesafe_akka_akka_actor_2_11_2_5_21.xml create mode 100644 .idea/libraries/Maven__com_typesafe_akka_akka_protobuf_2_11_2_5_21.xml create mode 100644 .idea/libraries/Maven__com_typesafe_akka_akka_slf4j_2_11_2_5_21.xml create mode 100644 .idea/libraries/Maven__com_typesafe_akka_akka_stream_2_11_2_5_21.xml create mode 100644 .idea/libraries/Maven__com_typesafe_config_1_3_3.xml create mode 100644 .idea/libraries/Maven__com_typesafe_ssl_config_core_2_11_0_3_7.xml create mode 100644 .idea/libraries/Maven__commons_cli_commons_cli_1_3_1.xml create mode 100644 .idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml create mode 100644 .idea/libraries/Maven__commons_io_commons_io_2_7.xml create mode 100644 .idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml create mode 100644 .idea/libraries/Maven__org_apache_calcite_avatica_avatica_core_1_17_0.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_compress_1_20.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_lang3_3_3_2.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_math3_3_5.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_annotations_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_clients_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_connector_base_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_connector_files_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_connector_kafka_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_core_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_file_sink_common_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_hadoop_fs_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_java_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_metrics_core_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_optimizer_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_queryable_state_client_java_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_runtime_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_scala_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_shaded_asm_7_7_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_shaded_guava_18_0_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_shaded_jackson_2_12_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_shaded_netty_4_1_49_Final_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_shaded_zookeeper_3_3_4_14_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_streaming_java_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_streaming_scala_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_table_api_java_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_table_api_java_bridge_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_table_api_scala_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_table_api_scala_bridge_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_table_common_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_table_planner_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_table_planner_blink_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_table_runtime_blink_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_flink_walkthrough_common_2_11_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_flink_force_shading_1_13_0.xml create mode 100644 .idea/libraries/Maven__org_apache_kafka_kafka_clients_2_4_1.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_12_1.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_12_1.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_12_1.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_14_1.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_50.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_50.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_50.xml create mode 100644 .idea/libraries/Maven__org_clapper_grizzled_slf4j_2_11_1_3_2.xml create mode 100644 .idea/libraries/Maven__org_codehaus_janino_commons_compiler_3_0_11.xml create mode 100644 .idea/libraries/Maven__org_codehaus_janino_janino_3_0_11.xml create mode 100644 .idea/libraries/Maven__org_javassist_javassist_3_24_0_GA.xml create mode 100644 .idea/libraries/Maven__org_lz4_lz4_java_1_6_0.xml create mode 100644 .idea/libraries/Maven__org_objenesis_objenesis_2_1.xml create mode 100644 .idea/libraries/Maven__org_projectlombok_lombok_1_18_20.xml create mode 100644 .idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml create mode 100644 .idea/libraries/Maven__org_scala_lang_modules_scala_java8_compat_2_11_0_7_0.xml create mode 100644 .idea/libraries/Maven__org_scala_lang_modules_scala_parser_combinators_2_11_1_0_4.xml create mode 100644 .idea/libraries/Maven__org_scala_lang_modules_scala_xml_2_11_1_0_5.xml create mode 100644 .idea/libraries/Maven__org_scala_lang_scala_compiler_2_11_12.xml create mode 100644 .idea/libraries/Maven__org_scala_lang_scala_library_2_11_12.xml create mode 100644 .idea/libraries/Maven__org_scala_lang_scala_reflect_2_11_12.xml create mode 100644 .idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_32.xml create mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_api_1_7_15.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_2_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_aop_5_3_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_beans_5_3_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_context_5_3_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_core_5_3_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_expression_5_3_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_jcl_5_3_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_web_5_3_9.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_webmvc_5_3_9.xml create mode 100644 .idea/libraries/Maven__org_xerial_snappy_snappy_java_1_1_8_3.xml create mode 100644 .idea/libraries/Maven__org_yaml_snakeyaml_1_28.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 data.txt/1 create mode 100644 data.txt/2 create mode 100644 data.txt/3 create mode 100644 data.txt/4 create mode 100644 data.txt/5 create mode 100644 data.txt/6 create mode 100644 data.txt/7 create mode 100644 data.txt/8 create mode 100644 flink-test.iml create mode 100644 pom.xml create mode 100644 src/main/java/com/kedacom/apitest/function/StatusStatisticsByDay.java create mode 100644 src/main/java/com/kedacom/apitest/function/TopNFunction.java create mode 100644 src/main/java/com/kedacom/apitest/sink/KafkaSinkTest.java create mode 100644 src/main/java/com/kedacom/apitest/source/DeviceInfoReading.java create mode 100644 src/main/java/com/kedacom/apitest/source/KafkaSourceTest.java create mode 100644 src/main/java/com/kedacom/apitest/source/ReduceTest.java create mode 100644 src/main/java/com/kedacom/apitest/source/SelfSourceTest.java create mode 100644 src/main/java/com/kedacom/apitest/source/SplitStreamTest.java create mode 100644 src/main/java/com/kedacom/apitest/state/KeyedStateApplicationTest.java create mode 100644 src/main/java/com/kedacom/apitest/state/KeyedStateTest.java create mode 100644 src/main/java/com/kedacom/apitest/state/OpetateStateTest.java create mode 100644 src/main/java/com/kedacom/apitest/tableapi/TableTest1.java create mode 100644 src/main/java/com/kedacom/apitest/tableapi/udf/UdfAggregateFunctionTest.java create mode 100644 src/main/java/com/kedacom/apitest/tableapi/udf/UdfScalarFunctionTest.java create mode 100644 src/main/java/com/kedacom/apitest/tableapi/udf/UdfTableFunctionTest.java create mode 100644 src/main/java/com/kedacom/apitest/window/SocketWindowTest.java create mode 100644 src/main/java/com/kedacom/apitest/window/WatermarkTest.java create mode 100644 src/main/java/com/kedacom/apitest/window/WindowTest1.java create mode 100644 src/main/java/com/kedacom/pojo/CarNumCount.java create mode 100644 src/main/java/com/kedacom/pojo/DeviceInfo.java create mode 100644 src/main/java/com/kedacom/pojo/DeviceStatusStt.java create mode 100644 src/main/java/com/kedacom/wc/SocketWordCount.java create mode 100644 src/main/java/com/kedacom/wc/StreamWordCount.java create mode 100644 src/main/java/com/kedacom/wc/WordCount.java create mode 100644 src/main/resources/carnum.txt create mode 100644 src/main/resources/deviceinfo.txt create mode 100644 src/main/resources/hello.txt create mode 100644 src/main/resources/log4j2.properties create mode 100644 target/classes/carnum.txt create mode 100644 target/classes/com/kedacom/apitest/function/StatusStatisticsByDay$1.class create mode 100644 target/classes/com/kedacom/apitest/function/StatusStatisticsByDay$ProcessDayStt$1.class create mode 100644 target/classes/com/kedacom/apitest/function/StatusStatisticsByDay$ProcessDayStt.class create mode 100644 target/classes/com/kedacom/apitest/function/StatusStatisticsByDay.class create mode 100644 target/classes/com/kedacom/apitest/function/TopNFunction$1.class create mode 100644 target/classes/com/kedacom/apitest/function/TopNFunction$CarCountAgg.class create mode 100644 target/classes/com/kedacom/apitest/function/TopNFunction$ResultWindow.class create mode 100644 target/classes/com/kedacom/apitest/function/TopNFunction$TopNHotCarNum$1.class create mode 100644 target/classes/com/kedacom/apitest/function/TopNFunction$TopNHotCarNum.class create mode 100644 target/classes/com/kedacom/apitest/function/TopNFunction.class create mode 100644 target/classes/com/kedacom/apitest/sink/KafkaSinkTest$DeviceSource.class create mode 100644 target/classes/com/kedacom/apitest/sink/KafkaSinkTest.class create mode 100644 target/classes/com/kedacom/apitest/source/DeviceInfoReading.class create mode 100644 target/classes/com/kedacom/apitest/source/KafkaSourceTest.class create mode 100644 target/classes/com/kedacom/apitest/source/ReduceTest$DeviceSource.class create mode 100644 target/classes/com/kedacom/apitest/source/ReduceTest.class create mode 100644 target/classes/com/kedacom/apitest/source/SelfSourceTest$DeviceSource.class create mode 100644 target/classes/com/kedacom/apitest/source/SelfSourceTest.class create mode 100644 target/classes/com/kedacom/apitest/source/SplitStreamTest$1.class create mode 100644 target/classes/com/kedacom/apitest/source/SplitStreamTest$2.class create mode 100644 target/classes/com/kedacom/apitest/source/SplitStreamTest$3.class create mode 100644 target/classes/com/kedacom/apitest/source/SplitStreamTest$DeviceSource.class create mode 100644 target/classes/com/kedacom/apitest/source/SplitStreamTest.class create mode 100644 target/classes/com/kedacom/apitest/state/KeyedStateApplicationTest$StatusSttFunction.class create mode 100644 target/classes/com/kedacom/apitest/state/KeyedStateApplicationTest.class create mode 100644 target/classes/com/kedacom/apitest/state/KeyedStateTest$MyKeyedState.class create mode 100644 target/classes/com/kedacom/apitest/state/KeyedStateTest.class create mode 100644 target/classes/com/kedacom/apitest/state/OpetateStateTest$CountMapper.class create mode 100644 target/classes/com/kedacom/apitest/state/OpetateStateTest$MyCountMapper.class create mode 100644 target/classes/com/kedacom/apitest/state/OpetateStateTest.class create mode 100644 target/classes/com/kedacom/apitest/tableapi/TableTest1$1.class create mode 100644 target/classes/com/kedacom/apitest/tableapi/TableTest1.class create mode 100644 target/classes/com/kedacom/apitest/tableapi/udf/UdfAggregateFunctionTest$AverageCarNum.class create mode 100644 target/classes/com/kedacom/apitest/tableapi/udf/UdfAggregateFunctionTest.class create mode 100644 target/classes/com/kedacom/apitest/tableapi/udf/UdfScalarFunctionTest$HashCode.class create mode 100644 target/classes/com/kedacom/apitest/tableapi/udf/UdfScalarFunctionTest.class create mode 100644 target/classes/com/kedacom/apitest/tableapi/udf/UdfTableFunctionTest$SplitName.class create mode 100644 target/classes/com/kedacom/apitest/tableapi/udf/UdfTableFunctionTest.class create mode 100644 target/classes/com/kedacom/apitest/window/SocketWindowTest$1.class create mode 100644 target/classes/com/kedacom/apitest/window/SocketWindowTest$2.class create mode 100644 target/classes/com/kedacom/apitest/window/SocketWindowTest$3.class create mode 100644 target/classes/com/kedacom/apitest/window/SocketWindowTest.class create mode 100644 target/classes/com/kedacom/apitest/window/WatermarkTest$CarCountAgg.class create mode 100644 target/classes/com/kedacom/apitest/window/WatermarkTest$DeviceSource.class create mode 100644 target/classes/com/kedacom/apitest/window/WatermarkTest$MyTimeAssigner$1.class create mode 100644 target/classes/com/kedacom/apitest/window/WatermarkTest$MyTimeAssigner.class create mode 100644 target/classes/com/kedacom/apitest/window/WatermarkTest$MyTimestampAndWatermarks$1.class create mode 100644 target/classes/com/kedacom/apitest/window/WatermarkTest$MyTimestampAndWatermarks.class create mode 100644 target/classes/com/kedacom/apitest/window/WatermarkTest$ResultWindow.class create mode 100644 target/classes/com/kedacom/apitest/window/WatermarkTest$TopNHotCarNum$1.class create mode 100644 target/classes/com/kedacom/apitest/window/WatermarkTest$TopNHotCarNum.class create mode 100644 target/classes/com/kedacom/apitest/window/WatermarkTest.class create mode 100644 target/classes/com/kedacom/apitest/window/WindowTest1$1.class create mode 100644 target/classes/com/kedacom/apitest/window/WindowTest1$2.class create mode 100644 target/classes/com/kedacom/apitest/window/WindowTest1$DeviceSource.class create mode 100644 target/classes/com/kedacom/apitest/window/WindowTest1.class create mode 100644 target/classes/com/kedacom/pojo/CarNumCount.class create mode 100644 target/classes/com/kedacom/pojo/DeviceInfo.class create mode 100644 target/classes/com/kedacom/pojo/DeviceStatusStt.class create mode 100644 target/classes/com/kedacom/wc/SocketWordCount$MyFlatMap.class create mode 100644 target/classes/com/kedacom/wc/SocketWordCount.class create mode 100644 target/classes/com/kedacom/wc/StreamWordCount$MyFlatMap.class create mode 100644 target/classes/com/kedacom/wc/StreamWordCount.class create mode 100644 target/classes/com/kedacom/wc/WordCount$MyFlatMap.class create mode 100644 target/classes/com/kedacom/wc/WordCount.class create mode 100644 target/classes/deviceinfo.txt create mode 100644 target/classes/hello.txt create mode 100644 target/classes/log4j2.properties create mode 100644 target/flink-test-1.0-SNAPSHOT.jar create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..633ef67 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/../../../../:\practice\flink-test\.idea/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..6b00516 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..980588c --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_4.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_4.xml new file mode 100644 index 0000000..4c5df29 --- /dev/null +++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_4.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_4.xml new file mode 100644 index 0000000..1e5c99e --- /dev/null +++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_esotericsoftware_kryo_kryo_2_24_0.xml b/.idea/libraries/Maven__com_esotericsoftware_kryo_kryo_2_24_0.xml new file mode 100644 index 0000000..28097c4 --- /dev/null +++ b/.idea/libraries/Maven__com_esotericsoftware_kryo_kryo_2_24_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_esotericsoftware_minlog_minlog_1_2.xml b/.idea/libraries/Maven__com_esotericsoftware_minlog_minlog_1_2.xml new file mode 100644 index 0000000..f926eec --- /dev/null +++ b/.idea/libraries/Maven__com_esotericsoftware_minlog_minlog_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_12_4.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_12_4.xml new file mode 100644 index 0000000..5351aad --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_12_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_12_4.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_12_4.xml new file mode 100644 index 0000000..b61928e --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_12_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_12_4.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_12_4.xml new file mode 100644 index 0000000..3088e4d --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_12_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_12_4.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_12_4.xml new file mode 100644 index 0000000..03661ab --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_12_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_12_4.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_12_4.xml new file mode 100644 index 0000000..518a6c9 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_12_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_12_4.xml b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_12_4.xml new file mode 100644 index 0000000..9c5251c --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_12_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_github_luben_zstd_jni_1_4_3_1.xml b/.idea/libraries/Maven__com_github_luben_zstd_jni_1_4_3_1.xml new file mode 100644 index 0000000..dfa7e53 --- /dev/null +++ b/.idea/libraries/Maven__com_github_luben_zstd_jni_1_4_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_github_scopt_scopt_2_11_3_5_0.xml b/.idea/libraries/Maven__com_github_scopt_scopt_2_11_3_5_0.xml new file mode 100644 index 0000000..e52bec4 --- /dev/null +++ b/.idea/libraries/Maven__com_github_scopt_scopt_2_11_3_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml new file mode 100644 index 0000000..0e66824 --- /dev/null +++ b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_twitter_chill_2_11_0_7_6.xml b/.idea/libraries/Maven__com_twitter_chill_2_11_0_7_6.xml new file mode 100644 index 0000000..ea68d3c --- /dev/null +++ b/.idea/libraries/Maven__com_twitter_chill_2_11_0_7_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_twitter_chill_java_0_7_6.xml b/.idea/libraries/Maven__com_twitter_chill_java_0_7_6.xml new file mode 100644 index 0000000..c08e25c --- /dev/null +++ b/.idea/libraries/Maven__com_twitter_chill_java_0_7_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_typesafe_akka_akka_actor_2_11_2_5_21.xml b/.idea/libraries/Maven__com_typesafe_akka_akka_actor_2_11_2_5_21.xml new file mode 100644 index 0000000..215c2c0 --- /dev/null +++ b/.idea/libraries/Maven__com_typesafe_akka_akka_actor_2_11_2_5_21.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_typesafe_akka_akka_protobuf_2_11_2_5_21.xml b/.idea/libraries/Maven__com_typesafe_akka_akka_protobuf_2_11_2_5_21.xml new file mode 100644 index 0000000..96dbc63 --- /dev/null +++ b/.idea/libraries/Maven__com_typesafe_akka_akka_protobuf_2_11_2_5_21.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_typesafe_akka_akka_slf4j_2_11_2_5_21.xml b/.idea/libraries/Maven__com_typesafe_akka_akka_slf4j_2_11_2_5_21.xml new file mode 100644 index 0000000..6153dc3 --- /dev/null +++ b/.idea/libraries/Maven__com_typesafe_akka_akka_slf4j_2_11_2_5_21.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_typesafe_akka_akka_stream_2_11_2_5_21.xml b/.idea/libraries/Maven__com_typesafe_akka_akka_stream_2_11_2_5_21.xml new file mode 100644 index 0000000..dad652b --- /dev/null +++ b/.idea/libraries/Maven__com_typesafe_akka_akka_stream_2_11_2_5_21.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_typesafe_config_1_3_3.xml b/.idea/libraries/Maven__com_typesafe_config_1_3_3.xml new file mode 100644 index 0000000..8db5e62 --- /dev/null +++ b/.idea/libraries/Maven__com_typesafe_config_1_3_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_typesafe_ssl_config_core_2_11_0_3_7.xml b/.idea/libraries/Maven__com_typesafe_ssl_config_core_2_11_0_3_7.xml new file mode 100644 index 0000000..0f9d94e --- /dev/null +++ b/.idea/libraries/Maven__com_typesafe_ssl_config_core_2_11_0_3_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_cli_commons_cli_1_3_1.xml b/.idea/libraries/Maven__commons_cli_commons_cli_1_3_1.xml new file mode 100644 index 0000000..a1510b9 --- /dev/null +++ b/.idea/libraries/Maven__commons_cli_commons_cli_1_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml new file mode 100644 index 0000000..13afda2 --- /dev/null +++ b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_io_commons_io_2_7.xml b/.idea/libraries/Maven__commons_io_commons_io_2_7.xml new file mode 100644 index 0000000..ded72c9 --- /dev/null +++ b/.idea/libraries/Maven__commons_io_commons_io_2_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml b/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml new file mode 100644 index 0000000..cba9dd2 --- /dev/null +++ b/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_calcite_avatica_avatica_core_1_17_0.xml b/.idea/libraries/Maven__org_apache_calcite_avatica_avatica_core_1_17_0.xml new file mode 100644 index 0000000..409cae9 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_calcite_avatica_avatica_core_1_17_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_compress_1_20.xml b/.idea/libraries/Maven__org_apache_commons_commons_compress_1_20.xml new file mode 100644 index 0000000..b762f0e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_compress_1_20.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_3_2.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_3_2.xml new file mode 100644 index 0000000..83cba3e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_math3_3_5.xml b/.idea/libraries/Maven__org_apache_commons_commons_math3_3_5.xml new file mode 100644 index 0000000..0575123 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_math3_3_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_annotations_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_annotations_1_13_0.xml new file mode 100644 index 0000000..ebf65f5 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_annotations_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_clients_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_clients_2_11_1_13_0.xml new file mode 100644 index 0000000..232be22 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_clients_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_connector_base_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_connector_base_1_13_0.xml new file mode 100644 index 0000000..e2e37b0 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_connector_base_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_connector_files_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_connector_files_1_13_0.xml new file mode 100644 index 0000000..dcc4ba8 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_connector_files_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_connector_kafka_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_connector_kafka_2_11_1_13_0.xml new file mode 100644 index 0000000..5e1db12 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_connector_kafka_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_core_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_core_1_13_0.xml new file mode 100644 index 0000000..b95e64c --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_core_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_file_sink_common_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_file_sink_common_1_13_0.xml new file mode 100644 index 0000000..c1c9f1c --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_file_sink_common_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_hadoop_fs_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_hadoop_fs_1_13_0.xml new file mode 100644 index 0000000..040c9ef --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_hadoop_fs_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_java_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_java_1_13_0.xml new file mode 100644 index 0000000..362f8bc --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_java_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_metrics_core_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_metrics_core_1_13_0.xml new file mode 100644 index 0000000..698be44 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_metrics_core_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_optimizer_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_optimizer_2_11_1_13_0.xml new file mode 100644 index 0000000..599b3eb --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_optimizer_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_queryable_state_client_java_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_queryable_state_client_java_1_13_0.xml new file mode 100644 index 0000000..6c7078a --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_queryable_state_client_java_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_runtime_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_runtime_2_11_1_13_0.xml new file mode 100644 index 0000000..cce9abf --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_runtime_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_scala_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_scala_2_11_1_13_0.xml new file mode 100644 index 0000000..66d771b --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_scala_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_shaded_asm_7_7_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_shaded_asm_7_7_1_13_0.xml new file mode 100644 index 0000000..8103dcf --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_shaded_asm_7_7_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_shaded_guava_18_0_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_shaded_guava_18_0_13_0.xml new file mode 100644 index 0000000..1f8766a --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_shaded_guava_18_0_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_shaded_jackson_2_12_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_shaded_jackson_2_12_1_13_0.xml new file mode 100644 index 0000000..bf67e2e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_shaded_jackson_2_12_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_shaded_netty_4_1_49_Final_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_shaded_netty_4_1_49_Final_13_0.xml new file mode 100644 index 0000000..a11d2b0 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_shaded_netty_4_1_49_Final_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_shaded_zookeeper_3_3_4_14_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_shaded_zookeeper_3_3_4_14_13_0.xml new file mode 100644 index 0000000..f944e1a --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_shaded_zookeeper_3_3_4_14_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_streaming_java_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_streaming_java_2_11_1_13_0.xml new file mode 100644 index 0000000..4247a00 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_streaming_java_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_streaming_scala_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_streaming_scala_2_11_1_13_0.xml new file mode 100644 index 0000000..c2cd9ef --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_streaming_scala_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_table_api_java_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_table_api_java_1_13_0.xml new file mode 100644 index 0000000..dfd0ea5 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_table_api_java_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_table_api_java_bridge_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_table_api_java_bridge_2_11_1_13_0.xml new file mode 100644 index 0000000..137fbad --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_table_api_java_bridge_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_table_api_scala_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_table_api_scala_2_11_1_13_0.xml new file mode 100644 index 0000000..0a40224 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_table_api_scala_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_table_api_scala_bridge_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_table_api_scala_bridge_2_11_1_13_0.xml new file mode 100644 index 0000000..29d4108 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_table_api_scala_bridge_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_table_common_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_table_common_1_13_0.xml new file mode 100644 index 0000000..f431c42 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_table_common_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_table_planner_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_table_planner_2_11_1_13_0.xml new file mode 100644 index 0000000..68d9922 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_table_planner_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_table_planner_blink_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_table_planner_blink_2_11_1_13_0.xml new file mode 100644 index 0000000..b0e4a2e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_table_planner_blink_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_table_runtime_blink_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_table_runtime_blink_2_11_1_13_0.xml new file mode 100644 index 0000000..163ab47 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_table_runtime_blink_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_flink_walkthrough_common_2_11_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_flink_walkthrough_common_2_11_1_13_0.xml new file mode 100644 index 0000000..c6b9d9e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_flink_walkthrough_common_2_11_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_flink_force_shading_1_13_0.xml b/.idea/libraries/Maven__org_apache_flink_force_shading_1_13_0.xml new file mode 100644 index 0000000..540f0a6 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_flink_force_shading_1_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_kafka_kafka_clients_2_4_1.xml b/.idea/libraries/Maven__org_apache_kafka_kafka_clients_2_4_1.xml new file mode 100644 index 0000000..8da5c0b --- /dev/null +++ b/.idea/libraries/Maven__org_apache_kafka_kafka_clients_2_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_12_1.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_12_1.xml new file mode 100644 index 0000000..ad03854 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_12_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_12_1.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_12_1.xml new file mode 100644 index 0000000..c1d6a13 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_12_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_12_1.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_12_1.xml new file mode 100644 index 0000000..c4b9506 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_12_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_14_1.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_14_1.xml new file mode 100644 index 0000000..ae5c0b5 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_14_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_50.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_50.xml new file mode 100644 index 0000000..add4136 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_50.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_50.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_50.xml new file mode 100644 index 0000000..f3aab20 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_50.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_50.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_50.xml new file mode 100644 index 0000000..149da37 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_50.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_clapper_grizzled_slf4j_2_11_1_3_2.xml b/.idea/libraries/Maven__org_clapper_grizzled_slf4j_2_11_1_3_2.xml new file mode 100644 index 0000000..3bda224 --- /dev/null +++ b/.idea/libraries/Maven__org_clapper_grizzled_slf4j_2_11_1_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_janino_commons_compiler_3_0_11.xml b/.idea/libraries/Maven__org_codehaus_janino_commons_compiler_3_0_11.xml new file mode 100644 index 0000000..ed3fac2 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_janino_commons_compiler_3_0_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_janino_janino_3_0_11.xml b/.idea/libraries/Maven__org_codehaus_janino_janino_3_0_11.xml new file mode 100644 index 0000000..d3306e3 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_janino_janino_3_0_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_24_0_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_24_0_GA.xml new file mode 100644 index 0000000..a9de551 --- /dev/null +++ b/.idea/libraries/Maven__org_javassist_javassist_3_24_0_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_lz4_lz4_java_1_6_0.xml b/.idea/libraries/Maven__org_lz4_lz4_java_1_6_0.xml new file mode 100644 index 0000000..f73a838 --- /dev/null +++ b/.idea/libraries/Maven__org_lz4_lz4_java_1_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml b/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml new file mode 100644 index 0000000..7ab319b --- /dev/null +++ b/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_projectlombok_lombok_1_18_20.xml b/.idea/libraries/Maven__org_projectlombok_lombok_1_18_20.xml new file mode 100644 index 0000000..138abdc --- /dev/null +++ b/.idea/libraries/Maven__org_projectlombok_lombok_1_18_20.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml b/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml new file mode 100644 index 0000000..457c7b7 --- /dev/null +++ b/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_scala_lang_modules_scala_java8_compat_2_11_0_7_0.xml b/.idea/libraries/Maven__org_scala_lang_modules_scala_java8_compat_2_11_0_7_0.xml new file mode 100644 index 0000000..f4b289b --- /dev/null +++ b/.idea/libraries/Maven__org_scala_lang_modules_scala_java8_compat_2_11_0_7_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_scala_lang_modules_scala_parser_combinators_2_11_1_0_4.xml b/.idea/libraries/Maven__org_scala_lang_modules_scala_parser_combinators_2_11_1_0_4.xml new file mode 100644 index 0000000..536c927 --- /dev/null +++ b/.idea/libraries/Maven__org_scala_lang_modules_scala_parser_combinators_2_11_1_0_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_scala_lang_modules_scala_xml_2_11_1_0_5.xml b/.idea/libraries/Maven__org_scala_lang_modules_scala_xml_2_11_1_0_5.xml new file mode 100644 index 0000000..50fb8f0 --- /dev/null +++ b/.idea/libraries/Maven__org_scala_lang_modules_scala_xml_2_11_1_0_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_scala_lang_scala_compiler_2_11_12.xml b/.idea/libraries/Maven__org_scala_lang_scala_compiler_2_11_12.xml new file mode 100644 index 0000000..db4ebd6 --- /dev/null +++ b/.idea/libraries/Maven__org_scala_lang_scala_compiler_2_11_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_scala_lang_scala_library_2_11_12.xml b/.idea/libraries/Maven__org_scala_lang_scala_library_2_11_12.xml new file mode 100644 index 0000000..6f45ebc --- /dev/null +++ b/.idea/libraries/Maven__org_scala_lang_scala_library_2_11_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_scala_lang_scala_reflect_2_11_12.xml b/.idea/libraries/Maven__org_scala_lang_scala_reflect_2_11_12.xml new file mode 100644 index 0000000..e1fe4d2 --- /dev/null +++ b/.idea/libraries/Maven__org_scala_lang_scala_reflect_2_11_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_32.xml b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_32.xml new file mode 100644 index 0000000..a758eac --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_32.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_15.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_15.xml new file mode 100644 index 0000000..9468916 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_15.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_5_3.xml new file mode 100644 index 0000000..9692f2c --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_5_3.xml new file mode 100644 index 0000000..2de3bc4 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_5_3.xml new file mode 100644 index 0000000..b31fb3d --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_5_3.xml new file mode 100644 index 0000000..d70f5b2 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_5_3.xml new file mode 100644 index 0000000..c26578f --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_5_3.xml new file mode 100644 index 0000000..a8e470e --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_5_3.xml new file mode 100644 index 0000000..a5e1c5d --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_5_3_8.xml b/.idea/libraries/Maven__org_springframework_spring_aop_5_3_8.xml new file mode 100644 index 0000000..bb8ab5e --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_aop_5_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_5_3_8.xml b/.idea/libraries/Maven__org_springframework_spring_beans_5_3_8.xml new file mode 100644 index 0000000..4f174a5 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_beans_5_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_5_3_8.xml b/.idea/libraries/Maven__org_springframework_spring_context_5_3_8.xml new file mode 100644 index 0000000..80365ee --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_5_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_core_5_3_8.xml b/.idea/libraries/Maven__org_springframework_spring_core_5_3_8.xml new file mode 100644 index 0000000..33d5fb1 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_core_5_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_5_3_8.xml b/.idea/libraries/Maven__org_springframework_spring_expression_5_3_8.xml new file mode 100644 index 0000000..7f848e0 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_expression_5_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_8.xml b/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_8.xml new file mode 100644 index 0000000..704e936 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_web_5_3_9.xml b/.idea/libraries/Maven__org_springframework_spring_web_5_3_9.xml new file mode 100644 index 0000000..eeb831a --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_web_5_3_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_9.xml b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_9.xml new file mode 100644 index 0000000..b4ee97b --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_xerial_snappy_snappy_java_1_1_8_3.xml b/.idea/libraries/Maven__org_xerial_snappy_snappy_java_1_1_8_3.xml new file mode 100644 index 0000000..e411463 --- /dev/null +++ b/.idea/libraries/Maven__org_xerial_snappy_snappy_java_1_1_8_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_28.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_28.xml new file mode 100644 index 0000000..1f853f7 --- /dev/null +++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..e8942bd --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..c9e3681 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/data.txt/1 b/data.txt/1 new file mode 100644 index 0000000..cc98e9a --- /dev/null +++ b/data.txt/1 @@ -0,0 +1,39 @@ +DeviceInfo{name='device_8', status=1, catNum=71, time=1626007474} +DeviceInfo{name='device_6', status=0, catNum=74, time=1626007475} +DeviceInfo{name='device_9', status=1, catNum=29, time=1626007475} +DeviceInfo{name='device_4', status=0, catNum=98, time=1626007476} +DeviceInfo{name='device_2', status=1, catNum=13, time=1626007477} +DeviceInfo{name='device_8', status=1, catNum=59, time=1626007478} +DeviceInfo{name='device_6', status=1, catNum=45, time=1626007479} +DeviceInfo{name='device_9', status=1, catNum=45, time=1626007479} +DeviceInfo{name='device_4', status=1, catNum=61, time=1626007480} +DeviceInfo{name='device_2', status=0, catNum=6, time=1626007481} +DeviceInfo{name='device_8', status=1, catNum=13, time=1626007482} +DeviceInfo{name='device_6', status=0, catNum=98, time=1626007483} +DeviceInfo{name='device_9', status=1, catNum=31, time=1626007483} +DeviceInfo{name='device_4', status=0, catNum=28, time=1626007484} +DeviceInfo{name='device_2', status=1, catNum=91, time=1626007485} +DeviceInfo{name='device_8', status=0, catNum=24, time=1626007486} +DeviceInfo{name='device_6', status=1, catNum=33, time=1626007487} +DeviceInfo{name='device_9', status=1, catNum=87, time=1626007487} +DeviceInfo{name='device_4', status=0, catNum=94, time=1626007488} +DeviceInfo{name='device_2', status=0, catNum=54, time=1626007489} +DeviceInfo{name='device_8', status=0, catNum=44, time=1626007490} +DeviceInfo{name='device_6', status=0, catNum=20, time=1626007491} +DeviceInfo{name='device_9', status=0, catNum=2, time=1626007491} +DeviceInfo{name='device_4', status=0, catNum=96, time=1626007492} +DeviceInfo{name='device_2', status=1, catNum=39, time=1626007493} +DeviceInfo{name='device_8', status=0, catNum=60, time=1626007494} +DeviceInfo{name='device_6', status=1, catNum=1, time=1626007495} +DeviceInfo{name='device_9', status=1, catNum=23, time=1626007495} +DeviceInfo{name='device_4', status=0, catNum=66, time=1626007496} +DeviceInfo{name='device_2', status=0, catNum=44, time=1626007497} +DeviceInfo{name='device_8', status=1, catNum=73, time=1626007498} +DeviceInfo{name='device_6', status=0, catNum=68, time=1626007499} +DeviceInfo{name='device_9', status=0, catNum=42, time=1626007499} +DeviceInfo{name='device_4', status=1, catNum=83, time=1626007500} +DeviceInfo{name='device_2', status=1, catNum=73, time=1626007501} +DeviceInfo{name='device_8', status=0, catNum=4, time=1626007502} +DeviceInfo{name='device_6', status=0, catNum=54, time=1626007503} +DeviceInfo{name='device_9', status=0, catNum=40, time=1626007503} +DeviceInfo{name='device_4', status=1, catNum=95, time=1626007504} diff --git a/data.txt/2 b/data.txt/2 new file mode 100644 index 0000000..520842e --- /dev/null +++ b/data.txt/2 @@ -0,0 +1,39 @@ +DeviceInfo{name='device_1', status=1, catNum=83, time=1626007474} +DeviceInfo{name='device_7', status=1, catNum=73, time=1626007475} +DeviceInfo{name='device_5', status=0, catNum=46, time=1626007476} +DeviceInfo{name='device_10', status=1, catNum=23, time=1626007476} +DeviceInfo{name='device_3', status=1, catNum=23, time=1626007477} +DeviceInfo{name='device_1', status=1, catNum=67, time=1626007478} +DeviceInfo{name='device_7', status=1, catNum=41, time=1626007479} +DeviceInfo{name='device_5', status=1, catNum=31, time=1626007480} +DeviceInfo{name='device_10', status=0, catNum=24, time=1626007480} +DeviceInfo{name='device_3', status=0, catNum=8, time=1626007481} +DeviceInfo{name='device_1', status=1, catNum=29, time=1626007482} +DeviceInfo{name='device_7', status=0, catNum=6, time=1626007483} +DeviceInfo{name='device_5', status=1, catNum=17, time=1626007484} +DeviceInfo{name='device_10', status=1, catNum=17, time=1626007484} +DeviceInfo{name='device_3', status=1, catNum=35, time=1626007485} +DeviceInfo{name='device_1', status=1, catNum=5, time=1626007486} +DeviceInfo{name='device_7', status=1, catNum=23, time=1626007487} +DeviceInfo{name='device_5', status=0, catNum=66, time=1626007488} +DeviceInfo{name='device_10', status=1, catNum=11, time=1626007488} +DeviceInfo{name='device_3', status=1, catNum=69, time=1626007489} +DeviceInfo{name='device_1', status=1, catNum=95, time=1626007490} +DeviceInfo{name='device_7', status=1, catNum=79, time=1626007491} +DeviceInfo{name='device_5', status=0, catNum=98, time=1626007492} +DeviceInfo{name='device_10', status=0, catNum=72, time=1626007492} +DeviceInfo{name='device_3', status=1, catNum=29, time=1626007493} +DeviceInfo{name='device_1', status=0, catNum=22, time=1626007494} +DeviceInfo{name='device_7', status=0, catNum=8, time=1626007495} +DeviceInfo{name='device_5', status=0, catNum=92, time=1626007496} +DeviceInfo{name='device_10', status=0, catNum=56, time=1626007496} +DeviceInfo{name='device_3', status=0, catNum=22, time=1626007497} +DeviceInfo{name='device_1', status=0, catNum=58, time=1626007498} +DeviceInfo{name='device_7', status=1, catNum=37, time=1626007499} +DeviceInfo{name='device_5', status=1, catNum=61, time=1626007500} +DeviceInfo{name='device_10', status=1, catNum=25, time=1626007500} +DeviceInfo{name='device_3', status=0, catNum=42, time=1626007501} +DeviceInfo{name='device_1', status=0, catNum=32, time=1626007502} +DeviceInfo{name='device_7', status=0, catNum=34, time=1626007503} +DeviceInfo{name='device_5', status=0, catNum=88, time=1626007504} +DeviceInfo{name='device_10', status=1, catNum=49, time=1626007504} diff --git a/data.txt/3 b/data.txt/3 new file mode 100644 index 0000000..50077e5 --- /dev/null +++ b/data.txt/3 @@ -0,0 +1,39 @@ +DeviceInfo{name='device_2', status=1, catNum=97, time=1626007474} +DeviceInfo{name='device_8', status=1, catNum=69, time=1626007475} +DeviceInfo{name='device_6', status=1, catNum=33, time=1626007476} +DeviceInfo{name='device_9', status=1, catNum=9, time=1626007476} +DeviceInfo{name='device_4', status=1, catNum=55, time=1626007477} +DeviceInfo{name='device_2', status=1, catNum=3, time=1626007478} +DeviceInfo{name='device_8', status=0, catNum=30, time=1626007479} +DeviceInfo{name='device_6', status=0, catNum=80, time=1626007480} +DeviceInfo{name='device_9', status=1, catNum=23, time=1626007480} +DeviceInfo{name='device_4', status=0, catNum=28, time=1626007481} +DeviceInfo{name='device_2', status=1, catNum=79, time=1626007482} +DeviceInfo{name='device_8', status=0, catNum=42, time=1626007483} +DeviceInfo{name='device_6', status=1, catNum=47, time=1626007484} +DeviceInfo{name='device_9', status=0, catNum=42, time=1626007484} +DeviceInfo{name='device_4', status=0, catNum=36, time=1626007485} +DeviceInfo{name='device_2', status=1, catNum=19, time=1626007486} +DeviceInfo{name='device_8', status=0, catNum=76, time=1626007487} +DeviceInfo{name='device_6', status=0, catNum=60, time=1626007488} +DeviceInfo{name='device_9', status=1, catNum=53, time=1626007488} +DeviceInfo{name='device_4', status=0, catNum=76, time=1626007489} +DeviceInfo{name='device_2', status=0, catNum=70, time=1626007490} +DeviceInfo{name='device_8', status=1, catNum=67, time=1626007491} +DeviceInfo{name='device_6', status=1, catNum=89, time=1626007492} +DeviceInfo{name='device_9', status=0, catNum=70, time=1626007492} +DeviceInfo{name='device_4', status=0, catNum=60, time=1626007493} +DeviceInfo{name='device_2', status=1, catNum=11, time=1626007494} +DeviceInfo{name='device_8', status=1, catNum=25, time=1626007495} +DeviceInfo{name='device_6', status=1, catNum=43, time=1626007496} +DeviceInfo{name='device_9', status=0, catNum=32, time=1626007496} +DeviceInfo{name='device_4', status=0, catNum=8, time=1626007497} +DeviceInfo{name='device_2', status=0, catNum=84, time=1626007498} +DeviceInfo{name='device_8', status=0, catNum=36, time=1626007499} +DeviceInfo{name='device_6', status=0, catNum=28, time=1626007500} +DeviceInfo{name='device_9', status=1, catNum=79, time=1626007500} +DeviceInfo{name='device_4', status=0, catNum=48, time=1626007501} +DeviceInfo{name='device_2', status=1, catNum=27, time=1626007502} +DeviceInfo{name='device_8', status=0, catNum=66, time=1626007503} +DeviceInfo{name='device_6', status=1, catNum=23, time=1626007504} +DeviceInfo{name='device_9', status=1, catNum=49, time=1626007504} diff --git a/data.txt/4 b/data.txt/4 new file mode 100644 index 0000000..e238506 --- /dev/null +++ b/data.txt/4 @@ -0,0 +1,38 @@ +DeviceInfo{name='device_3', status=0, catNum=10, time=1626007474} +DeviceInfo{name='device_1', status=1, catNum=83, time=1626007475} +DeviceInfo{name='device_7', status=1, catNum=37, time=1626007476} +DeviceInfo{name='device_5', status=0, catNum=68, time=1626007477} +DeviceInfo{name='device_10', status=0, catNum=54, time=1626007477} +DeviceInfo{name='device_3', status=1, catNum=89, time=1626007478} +DeviceInfo{name='device_1', status=0, catNum=16, time=1626007479} +DeviceInfo{name='device_7', status=1, catNum=15, time=1626007480} +DeviceInfo{name='device_5', status=1, catNum=75, time=1626007481} +DeviceInfo{name='device_10', status=0, catNum=94, time=1626007481} +DeviceInfo{name='device_3', status=0, catNum=34, time=1626007482} +DeviceInfo{name='device_1', status=0, catNum=70, time=1626007483} +DeviceInfo{name='device_7', status=1, catNum=49, time=1626007484} +DeviceInfo{name='device_5', status=1, catNum=27, time=1626007485} +DeviceInfo{name='device_10', status=1, catNum=89, time=1626007485} +DeviceInfo{name='device_3', status=0, catNum=60, time=1626007486} +DeviceInfo{name='device_1', status=1, catNum=23, time=1626007487} +DeviceInfo{name='device_7', status=0, catNum=96, time=1626007488} +DeviceInfo{name='device_5', status=0, catNum=36, time=1626007489} +DeviceInfo{name='device_10', status=0, catNum=4, time=1626007489} +DeviceInfo{name='device_3', status=1, catNum=11, time=1626007490} +DeviceInfo{name='device_1', status=0, catNum=84, time=1626007491} +DeviceInfo{name='device_7', status=1, catNum=17, time=1626007492} +DeviceInfo{name='device_5', status=0, catNum=38, time=1626007493} +DeviceInfo{name='device_10', status=0, catNum=84, time=1626007493} +DeviceInfo{name='device_3', status=1, catNum=35, time=1626007494} +DeviceInfo{name='device_1', status=1, catNum=39, time=1626007495} +DeviceInfo{name='device_7', status=0, catNum=58, time=1626007496} +DeviceInfo{name='device_5', status=0, catNum=74, time=1626007497} +DeviceInfo{name='device_10', status=1, catNum=87, time=1626007497} +DeviceInfo{name='device_3', status=0, catNum=68, time=1626007498} +DeviceInfo{name='device_1', status=1, catNum=55, time=1626007499} +DeviceInfo{name='device_7', status=1, catNum=35, time=1626007500} +DeviceInfo{name='device_5', status=1, catNum=11, time=1626007501} +DeviceInfo{name='device_10', status=0, catNum=34, time=1626007501} +DeviceInfo{name='device_3', status=0, catNum=88, time=1626007502} +DeviceInfo{name='device_1', status=0, catNum=28, time=1626007503} +DeviceInfo{name='device_7', status=1, catNum=47, time=1626007504} diff --git a/data.txt/5 b/data.txt/5 new file mode 100644 index 0000000..ad4242b --- /dev/null +++ b/data.txt/5 @@ -0,0 +1,38 @@ +DeviceInfo{name='device_4', status=1, catNum=45, time=1626007474} +DeviceInfo{name='device_2', status=1, catNum=33, time=1626007475} +DeviceInfo{name='device_8', status=0, catNum=14, time=1626007476} +DeviceInfo{name='device_6', status=0, catNum=76, time=1626007477} +DeviceInfo{name='device_9', status=0, catNum=42, time=1626007477} +DeviceInfo{name='device_4', status=0, catNum=90, time=1626007478} +DeviceInfo{name='device_2', status=0, catNum=76, time=1626007479} +DeviceInfo{name='device_8', status=1, catNum=43, time=1626007480} +DeviceInfo{name='device_6', status=1, catNum=13, time=1626007481} +DeviceInfo{name='device_9', status=1, catNum=9, time=1626007481} +DeviceInfo{name='device_4', status=1, catNum=93, time=1626007482} +DeviceInfo{name='device_2', status=0, catNum=12, time=1626007483} +DeviceInfo{name='device_8', status=0, catNum=56, time=1626007484} +DeviceInfo{name='device_6', status=0, catNum=66, time=1626007485} +DeviceInfo{name='device_9', status=1, catNum=11, time=1626007485} +DeviceInfo{name='device_4', status=0, catNum=74, time=1626007486} +DeviceInfo{name='device_2', status=0, catNum=82, time=1626007487} +DeviceInfo{name='device_8', status=1, catNum=1, time=1626007488} +DeviceInfo{name='device_6', status=1, catNum=81, time=1626007489} +DeviceInfo{name='device_9', status=0, catNum=64, time=1626007489} +DeviceInfo{name='device_4', status=0, catNum=10, time=1626007490} +DeviceInfo{name='device_2', status=0, catNum=74, time=1626007491} +DeviceInfo{name='device_8', status=1, catNum=99, time=1626007492} +DeviceInfo{name='device_6', status=0, catNum=70, time=1626007493} +DeviceInfo{name='device_9', status=1, catNum=1, time=1626007493} +DeviceInfo{name='device_4', status=1, catNum=49, time=1626007494} +DeviceInfo{name='device_2', status=1, catNum=53, time=1626007495} +DeviceInfo{name='device_8', status=0, catNum=20, time=1626007496} +DeviceInfo{name='device_6', status=1, catNum=69, time=1626007497} +DeviceInfo{name='device_9', status=1, catNum=17, time=1626007497} +DeviceInfo{name='device_4', status=1, catNum=99, time=1626007498} +DeviceInfo{name='device_2', status=1, catNum=23, time=1626007499} +DeviceInfo{name='device_8', status=1, catNum=75, time=1626007500} +DeviceInfo{name='device_6', status=1, catNum=39, time=1626007501} +DeviceInfo{name='device_9', status=0, catNum=30, time=1626007501} +DeviceInfo{name='device_4', status=1, catNum=21, time=1626007502} +DeviceInfo{name='device_2', status=0, catNum=4, time=1626007503} +DeviceInfo{name='device_8', status=1, catNum=1, time=1626007504} diff --git a/data.txt/6 b/data.txt/6 new file mode 100644 index 0000000..5e6f2c4 --- /dev/null +++ b/data.txt/6 @@ -0,0 +1,39 @@ +DeviceInfo{name='device_5', status=1, catNum=91, time=1626007474} +DeviceInfo{name='device_10', status=1, catNum=43, time=1626007474} +DeviceInfo{name='device_3', status=1, catNum=3, time=1626007475} +DeviceInfo{name='device_1', status=0, catNum=66, time=1626007476} +DeviceInfo{name='device_7', status=1, catNum=97, time=1626007477} +DeviceInfo{name='device_5', status=0, catNum=50, time=1626007478} +DeviceInfo{name='device_10', status=0, catNum=94, time=1626007478} +DeviceInfo{name='device_3', status=0, catNum=12, time=1626007479} +DeviceInfo{name='device_1', status=0, catNum=38, time=1626007480} +DeviceInfo{name='device_7', status=1, catNum=31, time=1626007481} +DeviceInfo{name='device_5', status=0, catNum=58, time=1626007482} +DeviceInfo{name='device_10', status=1, catNum=19, time=1626007482} +DeviceInfo{name='device_3', status=0, catNum=94, time=1626007483} +DeviceInfo{name='device_1', status=1, catNum=45, time=1626007484} +DeviceInfo{name='device_7', status=0, catNum=52, time=1626007485} +DeviceInfo{name='device_5', status=1, catNum=9, time=1626007486} +DeviceInfo{name='device_10', status=1, catNum=29, time=1626007486} +DeviceInfo{name='device_3', status=0, catNum=52, time=1626007487} +DeviceInfo{name='device_1', status=0, catNum=86, time=1626007488} +DeviceInfo{name='device_7', status=1, catNum=5, time=1626007489} +DeviceInfo{name='device_5', status=0, catNum=10, time=1626007490} +DeviceInfo{name='device_10', status=1, catNum=11, time=1626007490} +DeviceInfo{name='device_3', status=1, catNum=49, time=1626007491} +DeviceInfo{name='device_1', status=0, catNum=54, time=1626007492} +DeviceInfo{name='device_7', status=1, catNum=3, time=1626007493} +DeviceInfo{name='device_5', status=0, catNum=18, time=1626007494} +DeviceInfo{name='device_10', status=0, catNum=60, time=1626007494} +DeviceInfo{name='device_3', status=1, catNum=81, time=1626007495} +DeviceInfo{name='device_1', status=1, catNum=57, time=1626007496} +DeviceInfo{name='device_7', status=1, catNum=33, time=1626007497} +DeviceInfo{name='device_5', status=0, catNum=70, time=1626007498} +DeviceInfo{name='device_10', status=0, catNum=56, time=1626007498} +DeviceInfo{name='device_3', status=0, catNum=16, time=1626007499} +DeviceInfo{name='device_1', status=1, catNum=61, time=1626007500} +DeviceInfo{name='device_7', status=1, catNum=31, time=1626007501} +DeviceInfo{name='device_5', status=1, catNum=19, time=1626007502} +DeviceInfo{name='device_10', status=1, catNum=51, time=1626007502} +DeviceInfo{name='device_3', status=1, catNum=11, time=1626007503} +DeviceInfo{name='device_1', status=0, catNum=92, time=1626007504} diff --git a/data.txt/7 b/data.txt/7 new file mode 100644 index 0000000..2134718 --- /dev/null +++ b/data.txt/7 @@ -0,0 +1,39 @@ +DeviceInfo{name='device_6', status=1, catNum=43, time=1626007474} +DeviceInfo{name='device_9', status=0, catNum=44, time=1626007474} +DeviceInfo{name='device_4', status=1, catNum=35, time=1626007475} +DeviceInfo{name='device_2', status=1, catNum=73, time=1626007476} +DeviceInfo{name='device_8', status=0, catNum=80, time=1626007477} +DeviceInfo{name='device_6', status=0, catNum=96, time=1626007478} +DeviceInfo{name='device_9', status=1, catNum=1, time=1626007478} +DeviceInfo{name='device_4', status=0, catNum=34, time=1626007479} +DeviceInfo{name='device_2', status=1, catNum=37, time=1626007480} +DeviceInfo{name='device_8', status=1, catNum=85, time=1626007481} +DeviceInfo{name='device_6', status=0, catNum=50, time=1626007482} +DeviceInfo{name='device_9', status=1, catNum=13, time=1626007482} +DeviceInfo{name='device_4', status=0, catNum=12, time=1626007483} +DeviceInfo{name='device_2', status=1, catNum=31, time=1626007484} +DeviceInfo{name='device_8', status=1, catNum=5, time=1626007485} +DeviceInfo{name='device_6', status=1, catNum=35, time=1626007486} +DeviceInfo{name='device_9', status=1, catNum=67, time=1626007486} +DeviceInfo{name='device_4', status=0, catNum=20, time=1626007487} +DeviceInfo{name='device_2', status=1, catNum=63, time=1626007488} +DeviceInfo{name='device_8', status=0, catNum=2, time=1626007489} +DeviceInfo{name='device_6', status=0, catNum=52, time=1626007490} +DeviceInfo{name='device_9', status=1, catNum=11, time=1626007490} +DeviceInfo{name='device_4', status=0, catNum=44, time=1626007491} +DeviceInfo{name='device_2', status=0, catNum=78, time=1626007492} +DeviceInfo{name='device_8', status=0, catNum=38, time=1626007493} +DeviceInfo{name='device_6', status=1, catNum=21, time=1626007494} +DeviceInfo{name='device_9', status=1, catNum=41, time=1626007494} +DeviceInfo{name='device_4', status=1, catNum=89, time=1626007495} +DeviceInfo{name='device_2', status=1, catNum=3, time=1626007496} +DeviceInfo{name='device_8', status=0, catNum=38, time=1626007497} +DeviceInfo{name='device_6', status=0, catNum=52, time=1626007498} +DeviceInfo{name='device_9', status=0, catNum=54, time=1626007498} +DeviceInfo{name='device_4', status=1, catNum=85, time=1626007499} +DeviceInfo{name='device_2', status=1, catNum=39, time=1626007500} +DeviceInfo{name='device_8', status=1, catNum=15, time=1626007501} +DeviceInfo{name='device_6', status=1, catNum=99, time=1626007502} +DeviceInfo{name='device_9', status=1, catNum=33, time=1626007502} +DeviceInfo{name='device_4', status=1, catNum=87, time=1626007503} +DeviceInfo{name='device_2', status=0, catNum=28, time=1626007504} diff --git a/data.txt/8 b/data.txt/8 new file mode 100644 index 0000000..9d7c5e1 --- /dev/null +++ b/data.txt/8 @@ -0,0 +1,39 @@ +DeviceInfo{name='device_7', status=0, catNum=80, time=1626007474} +DeviceInfo{name='device_5', status=0, catNum=36, time=1626007475} +DeviceInfo{name='device_10', status=0, catNum=66, time=1626007475} +DeviceInfo{name='device_3', status=1, catNum=91, time=1626007476} +DeviceInfo{name='device_1', status=0, catNum=66, time=1626007477} +DeviceInfo{name='device_7', status=1, catNum=57, time=1626007478} +DeviceInfo{name='device_5', status=0, catNum=96, time=1626007479} +DeviceInfo{name='device_10', status=0, catNum=36, time=1626007479} +DeviceInfo{name='device_3', status=0, catNum=98, time=1626007480} +DeviceInfo{name='device_1', status=1, catNum=27, time=1626007481} +DeviceInfo{name='device_7', status=1, catNum=19, time=1626007482} +DeviceInfo{name='device_5', status=1, catNum=75, time=1626007483} +DeviceInfo{name='device_10', status=1, catNum=59, time=1626007483} +DeviceInfo{name='device_3', status=1, catNum=33, time=1626007484} +DeviceInfo{name='device_1', status=0, catNum=90, time=1626007485} +DeviceInfo{name='device_7', status=0, catNum=52, time=1626007486} +DeviceInfo{name='device_5', status=1, catNum=95, time=1626007487} +DeviceInfo{name='device_10', status=0, catNum=16, time=1626007487} +DeviceInfo{name='device_3', status=1, catNum=99, time=1626007488} +DeviceInfo{name='device_1', status=0, catNum=0, time=1626007489} +DeviceInfo{name='device_7', status=1, catNum=63, time=1626007490} +DeviceInfo{name='device_5', status=0, catNum=12, time=1626007491} +DeviceInfo{name='device_10', status=1, catNum=51, time=1626007491} +DeviceInfo{name='device_3', status=1, catNum=35, time=1626007492} +DeviceInfo{name='device_1', status=1, catNum=5, time=1626007493} +DeviceInfo{name='device_7', status=0, catNum=22, time=1626007494} +DeviceInfo{name='device_5', status=1, catNum=17, time=1626007495} +DeviceInfo{name='device_10', status=0, catNum=82, time=1626007495} +DeviceInfo{name='device_3', status=1, catNum=79, time=1626007496} +DeviceInfo{name='device_1', status=1, catNum=35, time=1626007497} +DeviceInfo{name='device_7', status=0, catNum=0, time=1626007498} +DeviceInfo{name='device_5', status=0, catNum=4, time=1626007499} +DeviceInfo{name='device_10', status=1, catNum=21, time=1626007499} +DeviceInfo{name='device_3', status=1, catNum=79, time=1626007500} +DeviceInfo{name='device_1', status=1, catNum=81, time=1626007501} +DeviceInfo{name='device_7', status=1, catNum=37, time=1626007502} +DeviceInfo{name='device_5', status=0, catNum=20, time=1626007503} +DeviceInfo{name='device_10', status=0, catNum=16, time=1626007503} +DeviceInfo{name='device_3', status=0, catNum=80, time=1626007504} diff --git a/flink-test.iml b/flink-test.iml new file mode 100644 index 0000000..83a4e4e --- /dev/null +++ b/flink-test.iml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..be956f1 --- /dev/null +++ b/pom.xml @@ -0,0 +1,127 @@ + + + 4.0.0 + + org.kedacom + flink-test + 1.0-SNAPSHOT + + + UTF-8 + 1.13.0 + 1.8 + 2.11 + 8 + 8 + 2.12.1 + + + + + + org.apache.flink + flink-java + ${flink.version} + + + + + org.apache.flink + flink-walkthrough-common_${scala.binary.version} + ${flink.version} + + + + + org.apache.flink + flink-streaming-java_${scala.binary.version} + ${flink.version} + + + + org.apache.flink + flink-clients_${scala.binary.version} + ${flink.version} + + + + org.apache.flink + flink-table-planner-blink_${scala.binary.version} + ${flink.version} + + + + org.apache.flink + flink-table-api-java-bridge_${scala.binary.version} + ${flink.version} + + + org.apache.flink + flink-table-planner_${scala.binary.version} + ${flink.version} + + + org.apache.flink + flink-table-planner-blink_${scala.binary.version} + ${flink.version} + + + org.apache.flink + flink-table-common + ${flink.version} + + + + + + + + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} + runtime + + + org.apache.logging.log4j + log4j-api + ${log4j.version} + runtime + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + runtime + + + org.projectlombok + lombok + RELEASE + compile + + + org.projectlombok + lombok + RELEASE + compile + + + org.apache.flink + flink-connector-kafka_${scala.binary.version} + ${flink.version} + + + + + \ No newline at end of file diff --git a/src/main/java/com/kedacom/apitest/function/StatusStatisticsByDay.java b/src/main/java/com/kedacom/apitest/function/StatusStatisticsByDay.java new file mode 100644 index 0000000..ed5f243 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/function/StatusStatisticsByDay.java @@ -0,0 +1,159 @@ +package com.kedacom.apitest.function; + +import com.kedacom.pojo.DeviceInfo; +import com.kedacom.pojo.DeviceStatusStt; +import org.apache.flink.api.common.state.MapState; +import org.apache.flink.api.common.state.MapStateDescriptor; +import org.apache.flink.api.common.state.ValueState; +import org.apache.flink.api.common.state.ValueStateDescriptor; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.configuration.Configuration; +import org.apache.flink.shaded.curator4.com.google.common.collect.Lists; +import org.apache.flink.streaming.api.TimeCharacteristic; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor; +import org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction; +import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.streaming.api.windowing.windows.TimeWindow; +import org.apache.flink.util.Collector; + +import java.net.URL; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Comparator; + +public class StatusStatisticsByDay { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); + env.getConfig().setAutoWatermarkInterval(100); + + // 文件转流 + URL resource = TopNFunction.class.getResource("/deviceinfo.txt"); + DataStreamSource inputStream = env.readTextFile(resource.getPath()); + + // 转换pojo + DataStream dataStream = inputStream.map(line -> { + String[] fields = line.split(","); + return new DeviceInfo(fields[0], new Integer(fields[1]), new Integer(fields[2]), new Long(fields[3])); + }).assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor(Time.seconds(10)) { + @Override + public long extractTimestamp(DeviceInfo deviceInfo) { + return deviceInfo.getTime() * 1000; + } + }); + + // 自定义keyed state,统计不同name个数,窗口聚合结果 + SingleOutputStreamOperator> resultStrem = dataStream + .keyBy(DeviceInfo::getName) + .window(TumblingEventTimeWindows.of(Time.days(1), Time.hours(-8))) +// .window(TumblingEventTimeWindows.of(Time.seconds(10))) + .allowedLateness(Time.seconds(10)) + .process(new ProcessDayStt()); + + resultStrem.print("daystt"); + + env.execute("day statistics job"); + } + + public static class ProcessDayStt extends ProcessWindowFunction, String, TimeWindow> { + + private static MapState daySttMap; // 保持每一天统计数据,可用来做周、月统计。。。 + private static ValueState dayStt; + + + @Override + public void open(Configuration parameters) throws Exception { + daySttMap = getRuntimeContext().getMapState(new MapStateDescriptor("day-status-stt", + Long.class, DeviceStatusStt.class)); + + dayStt = getRuntimeContext().getState(new ValueStateDescriptor("day-status-latest-stt", DeviceStatusStt.class)); + } + + @Override + public void process(String s, Context context, Iterable iterable, Collector> collector) throws Exception { + DeviceStatusStt latestDayStt = null; + DeviceStatusStt curDayStt = new DeviceStatusStt(); + + boolean firstDayStt = false; + + // 获取统计时间,以窗口开始时间作为统计时间 + long beginTime = context.window().getStart(); + long countTime = context.window().getEnd(); + + if(dayStt.value() == null){ + // 第一次状态填充 + firstDayStt = true; + }else{ + // 赋值前一天日统计数据 + latestDayStt = dayStt.value(); + } + + // 先对集合按照时间升序排序 + ArrayList deviceInfos = Lists.newArrayList(iterable); + + deviceInfos.sort(new Comparator() { + @Override + public int compare(DeviceInfo o1, DeviceInfo o2) { + if (o1.getTime() > o2.getTime()) + return 1; + else if (o1.getTime() == o2.getTime()) + return 0; + else + return -1; + } + }); + + for(int index = 0; index < deviceInfos.size(); index++){ + if(0 == index){ + // 第一个状态,且为第一天统计 + if(firstDayStt){ + curDayStt.setContinueDurationTime(0);// 持续时间设置为0 + }else { + // 需要和上次状态比较,计算持续时长 + if(latestDayStt.getStatus() == deviceInfos.get(index).getStatus()){ + // 持续时长为当前事件时间-上次时间 + 上次持续时长 + curDayStt.setContinueDurationTime(deviceInfos.get(index).getTime() - + beginTime/1000 + latestDayStt.getContinueDurationTime()); + }else{ + // 否则状态改变,设置时间为0 + curDayStt.setContinueDurationTime(0); + } + } + curDayStt.setTotalCarNum(deviceInfos.get(index).getCarNum());// 过车总数设置为第一条数据过车数据 + }else{ + // 和当前日统计上一次数据比较 + if(curDayStt.getStatus() == deviceInfos.get(index).getStatus()){ + // 状态不变,持续时长增加 + curDayStt.setContinueDurationTime(deviceInfos.get(index).getTime() - + curDayStt.getTime() + curDayStt.getContinueDurationTime()); + }else{ + // 状态改变,持续时长为0 + curDayStt.setContinueDurationTime(0); + } + // 过车统计 + curDayStt.setTotalCarNum(curDayStt.getTotalCarNum() + deviceInfos.get(index).getCarNum()); + } + // 赋值其它属性 + curDayStt.setName(deviceInfos.get(index).getName()); + curDayStt.setTime(deviceInfos.get(index).getTime()); + curDayStt.setStatus(deviceInfos.get(index).getStatus()); + } + // 日统计,截止时间要到当天24点,需要计算最后一条记录和24点之间的状态 + if(deviceInfos.get(deviceInfos.size()-1).getTime() < countTime/1000){ + curDayStt.setContinueDurationTime(countTime/1000 - deviceInfos.get(deviceInfos.size()-1).getTime() + curDayStt.getContinueDurationTime()); + } + + // 输出集合 + collector.collect(new Tuple2<>(new Timestamp(countTime).toString(), curDayStt)); + // 更新状态数据 + dayStt.update(curDayStt); + } + } + +} diff --git a/src/main/java/com/kedacom/apitest/function/TopNFunction.java b/src/main/java/com/kedacom/apitest/function/TopNFunction.java new file mode 100644 index 0000000..f07b018 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/function/TopNFunction.java @@ -0,0 +1,161 @@ +package com.kedacom.apitest.function; + +import com.kedacom.pojo.CarNumCount; +import com.kedacom.pojo.DeviceInfo; +import org.apache.commons.compress.utils.Lists; +import org.apache.flink.api.common.functions.AggregateFunction; +import org.apache.flink.api.common.state.ListState; +import org.apache.flink.api.common.state.ListStateDescriptor; +import org.apache.flink.configuration.Configuration; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.KeyedProcessFunction; +import org.apache.flink.streaming.api.functions.timestamps.AscendingTimestampExtractor; +import org.apache.flink.streaming.api.functions.windowing.WindowFunction; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.streaming.api.windowing.windows.TimeWindow; +import org.apache.flink.util.Collector; + +import java.net.URL; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.concurrent.TimeUnit; + +// topN 过车数据 +public class TopNFunction { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + // 文件转流 + URL resource = TopNFunction.class.getResource("/deviceinfo.txt"); + //String file = "E:\\practice\\flink-test\\src\\main\\resources\\deviceinfo.txt"; + DataStreamSource inputStream = env.readTextFile(resource.getPath()); + + // 转换pojo + DataStream dataStream = inputStream.map(line -> { + String[] fields = line.split(","); + return new DeviceInfo(fields[0], new Integer(fields[1]), new Integer(fields[2]), new Long(fields[3])); + }).assignTimestampsAndWatermarks(new AscendingTimestampExtractor(){ + + @Override + public long extractAscendingTimestamp(DeviceInfo deviceInfo) { + return deviceInfo.getTime() * 1000; + } + }); + + // 自定义keyed state,统计不同name个数,窗口聚合结果 + SingleOutputStreamOperator windowAggStream = dataStream.keyBy(DeviceInfo::getName) + .timeWindow(Time.seconds(10)) + .aggregate(new CarCountAgg(), new ResultWindow()); + + // 收集统一窗口所有设备过车数,输出topN + SingleOutputStreamOperator resultStream = windowAggStream.keyBy(CarNumCount::getTimewindowEnd) + .process(new TopNHotCarNum(5)); + + resultStream.print(); + + env.execute(); + } + + // 自定义聚合 + public static class CarCountAgg implements AggregateFunction { + + @Override + public Long createAccumulator() { + return 0L; + } + + @Override + public Long add(DeviceInfo deviceInfo, Long aLong) { + return aLong + 1; + } + + @Override + public Long getResult(Long aLong) { + return aLong; + } + + @Override + public Long merge(Long aLong, Long acc1) { + return aLong + acc1; + } + } + + // 自定义全窗口函数 + public static class ResultWindow implements WindowFunction { + + @Override + public void apply(String s, TimeWindow timeWindow, java.lang.Iterable iterable, Collector collector) throws Exception { + String name = s; + Long windowEnd = timeWindow.getEnd(); + Integer count = iterable.iterator().next().intValue(); + + collector.collect(new CarNumCount(name, count, windowEnd)); + } + } + + // 自定义processfunciton + public static class TopNHotCarNum extends KeyedProcessFunction { + + private int topN = 5; + + public TopNHotCarNum(int topN) { + this.topN = topN; + } + + // 保持当前窗口类所有输出的CarNumCount + ListState carNumCountListState; + + @Override + public void open(Configuration parameters) throws Exception { + carNumCountListState = getRuntimeContext().getListState(new ListStateDescriptor("carnum-count-list", CarNumCount.class)); + } + + @Override + public void processElement(CarNumCount carNumCount, Context context, Collector collector) throws Exception { + carNumCountListState.add(carNumCount); + + context.timerService().registerEventTimeTimer(carNumCount.getTimewindowEnd() + 1); + } + + @Override + public void onTimer(long timestamp, OnTimerContext ctx, Collector out) throws Exception { + ArrayList countArrayList = Lists.newArrayList(carNumCountListState.get().iterator()); + + countArrayList.sort(new Comparator() { + @Override + public int compare(CarNumCount o1, CarNumCount o2) { + if (o1.getTotalCarNum() > o2.getTotalCarNum()) + return -1; + else if (o1.getTotalCarNum() == o2.getTotalCarNum()) + return 0; + else + return 1; + } + }); + + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("===================\n"); + stringBuilder.append("窗口结束时间:").append(new Timestamp(timestamp - 1)).append("\n"); + + for (int index = 0; index < Math.min(topN, countArrayList.size()); index++) { + CarNumCount carNumCount = countArrayList.get(index); + stringBuilder.append("NO ").append(index + 1).append(":\n") + .append("name = ").append(carNumCount.getName()).append("\n") + .append("totalCatNum = ").append(carNumCount.getTotalCarNum()) + .append("\n\n"); + } + stringBuilder.append("==========================\n\n"); + + TimeUnit.SECONDS.sleep(1); + + out.collect(stringBuilder.toString()); + + carNumCountListState.clear(); + } + } +} diff --git a/src/main/java/com/kedacom/apitest/sink/KafkaSinkTest.java b/src/main/java/com/kedacom/apitest/sink/KafkaSinkTest.java new file mode 100644 index 0000000..31ec750 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/sink/KafkaSinkTest.java @@ -0,0 +1,62 @@ +package com.kedacom.apitest.sink; + +import com.kedacom.apitest.source.SelfSourceTest; +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.api.common.serialization.SerializationSchema; +import org.apache.flink.api.common.serialization.SimpleStringSchema; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.KeyedStream; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.source.SourceFunction; +import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer; +import org.apache.flink.streaming.util.serialization.KeyedSerializationSchema; + +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +public class KafkaSinkTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + + + DataStream device = env.addSource(new DeviceSource()); + + DataStream transformStream = device.map(dev -> dev.toString()); + + transformStream.addSink(new FlinkKafkaProducer("172.16.64.85:9092", "deviceout", new SimpleStringSchema())); + + transformStream.print(); + + env.execute("device job"); + } + + public static class DeviceSource implements SourceFunction { + + private boolean running = true; + + @Override + public void run(SourceContext sourceContext) throws Exception { + while (running) { + Random random = new Random(); + + Map devsMap = new HashMap<>(); + for (int index = 0; index < 10; index++) { + devsMap.put("device_" + (index + 1), (int) random.nextInt(100)); + } + for (String dev : devsMap.keySet()) { + int status = devsMap.get(dev) % 2 == 0 ? 0 : 1; + sourceContext.collect(new DeviceInfo(dev, status, devsMap.get(dev), Instant.now().getEpochSecond())); + } + TimeUnit.SECONDS.sleep(1); + } + } + + @Override + public void cancel() { + running = false; + } + } +} diff --git a/src/main/java/com/kedacom/apitest/source/DeviceInfoReading.java b/src/main/java/com/kedacom/apitest/source/DeviceInfoReading.java new file mode 100644 index 0000000..135c1a1 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/source/DeviceInfoReading.java @@ -0,0 +1,30 @@ +package com.kedacom.apitest.source; + +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; + +import java.lang.reflect.Array; +import java.util.Arrays; + +public class DeviceInfoReading { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + + DataStream inputDevInfoStream = env.fromCollection(Arrays.asList(new DeviceInfo("dev1", 0, 10, 1625819869), + new DeviceInfo("dev2", 1, 20, 1625819869), + new DeviceInfo("dev3", 0, 40, 1625819869), + new DeviceInfo("dev4", 1, 2, 1625819869), + new DeviceInfo("dev5", 1, 5, 1625819869))); + + DataStream integerDataStream = env.fromElements(1, 2, 10, 100, 250, 500); + + + inputDevInfoStream.print("device"); + + integerDataStream.print("int").setParallelism(1); + + env.execute("device job"); + } +} diff --git a/src/main/java/com/kedacom/apitest/source/KafkaSourceTest.java b/src/main/java/com/kedacom/apitest/source/KafkaSourceTest.java new file mode 100644 index 0000000..5fab6f3 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/source/KafkaSourceTest.java @@ -0,0 +1,55 @@ +package com.kedacom.apitest.source; + +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.api.common.serialization.SimpleStringSchema; +import org.apache.flink.connector.kafka.source.KafkaSource; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer; + +import java.util.Arrays; +import java.util.Properties; + +public class KafkaSourceTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + + Properties prop = new Properties(); + prop.setProperty("bootstrap.servers","172.16.64.85:9092");//多个的话可以指定 + prop.setProperty("key.deserializer","org.apache.kafka.common.serialization.StringDeserializer"); + prop.setProperty("value.deserializer","org.apache.kafka.common.serialization.StringDeserializer"); + // 指定kafka的消费者从哪里开始消费数据 + // 共有三种方式, + // #earliest + // 当各分区下有已提交的offset时,从提交的offset开始消费; + // 无提交的offset时,从头开始消费 + // #latest + // 当各分区下有已提交的offset时,从提交的offset开始消费; + // 无提交的offset时,消费新产生的该分区下的数据 + // #none + // topic各分区都存在已提交的offset时, + // 从offset后开始消费; + // 只要有一个分区不存在已提交的offset,则抛出异常 + prop.setProperty("auto.offset.reset","latest"); + + //设置checkpoint后在提交offset,即oncheckpoint模式 + // 该值默认为true, + FlinkKafkaConsumer devinfoConsumer = new FlinkKafkaConsumer<>("deviceinfo", new SimpleStringSchema(), prop); + devinfoConsumer.setCommitOffsetsOnCheckpoints(true); + + DataStream deviceStream = env.addSource(new FlinkKafkaConsumer("deviceinfo", new SimpleStringSchema(), prop)); + + DataStream map = deviceStream.map(dev -> { + String[] fields = dev.split(","); + return new DeviceInfo(fields[0], new Integer(fields[1]), new Integer(fields[2]), new Long(fields[3])); + }); + + deviceStream.print("devicd").setParallelism(2); + + map.print("map"); + + env.execute("device job"); + } +} diff --git a/src/main/java/com/kedacom/apitest/source/ReduceTest.java b/src/main/java/com/kedacom/apitest/source/ReduceTest.java new file mode 100644 index 0000000..23c5034 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/source/ReduceTest.java @@ -0,0 +1,60 @@ +package com.kedacom.apitest.source; + +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.KeyedStream; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.source.SourceFunction; + +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +public class ReduceTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + DataStream device = env.addSource(new DeviceSource()); + + DataStream reduce = device. + filter(dev -> dev.getName().startsWith("device_2")). + keyBy(dev -> dev.getName()). + reduce((curStatus,newStatus) -> + new DeviceInfo(curStatus.getName(), newStatus.getStatus(), curStatus.getCarNum()+newStatus.getCarNum(), newStatus.getTime())); + + reduce.print("reduce"); + + env.execute("device job"); + } + + + public static class DeviceSource implements SourceFunction { + + private boolean running = true; + + @Override + public void run(SourceContext sourceContext) throws Exception { + while (running) { + Random random = new Random(); + + Map devsMap = new HashMap<>(); + for (int index = 0; index < 10; index++) { + devsMap.put("device_" + (index + 1), (int) random.nextInt(100)); + } + for (String dev : devsMap.keySet()) { + int status = devsMap.get(dev) % 2 == 0 ? 0 : 1; + sourceContext.collect(new DeviceInfo(dev, status, devsMap.get(dev), Instant.now().getEpochSecond())); + } + TimeUnit.SECONDS.sleep(1); + } + } + + @Override + public void cancel() { + running = false; + } + } +} diff --git a/src/main/java/com/kedacom/apitest/source/SelfSourceTest.java b/src/main/java/com/kedacom/apitest/source/SelfSourceTest.java new file mode 100644 index 0000000..924d6e6 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/source/SelfSourceTest.java @@ -0,0 +1,76 @@ +package com.kedacom.apitest.source; + +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.api.common.functions.FilterFunction; +import org.apache.flink.api.common.functions.MapFunction; +import org.apache.flink.api.common.serialization.SimpleStringSchema; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.datastream.KeyedStream; +import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.source.SourceFunction; +import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer; + +import javax.xml.crypto.Data; +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +public class SelfSourceTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + + + DataStream device = env.addSource(new DeviceSource()); + + DataStream filterStream = device. +// map( deviceInfo -> deviceInfo). + filter(s -> s.getName().startsWith("device_1")); + + KeyedStream keyedStream = device. + filter(s -> s.getName().startsWith("device_1")). + keyBy(deviceInfo -> deviceInfo.getName()); + DataStream max = keyedStream.max("carNum"); + DataStream sum = keyedStream.sum("carNum"); + +// device.print("devicd").setParallelism(1); + filterStream.print("filter"); +// keyedStream.print("keyby"); + max.print("max").setParallelism(1); + sum.print("sum").setParallelism(1); + + + env.execute("device job"); + } + + public static class DeviceSource implements SourceFunction { + + private boolean running = true; + + @Override + public void run(SourceContext sourceContext) throws Exception { + while (running) { + Random random = new Random(); + + Map devsMap = new HashMap<>(); + for (int index = 0; index < 10; index++) { + devsMap.put("device_" + (index + 1), (int) random.nextInt(100)); + } + for (String dev : devsMap.keySet()) { + int status = devsMap.get(dev) % 2 == 0 ? 0 : 1; + sourceContext.collect(new DeviceInfo(dev, status, devsMap.get(dev), Instant.now().getEpochSecond())); + } + TimeUnit.SECONDS.sleep(1); + } + } + + @Override + public void cancel() { + running = false; + } + } +} diff --git a/src/main/java/com/kedacom/apitest/source/SplitStreamTest.java b/src/main/java/com/kedacom/apitest/source/SplitStreamTest.java new file mode 100644 index 0000000..d707f8f --- /dev/null +++ b/src/main/java/com/kedacom/apitest/source/SplitStreamTest.java @@ -0,0 +1,103 @@ +package com.kedacom.apitest.source; + +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.api.common.functions.MapFunction; +import org.apache.flink.api.common.typeinfo.TypeInformation; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.api.java.tuple.Tuple3; +import org.apache.flink.streaming.api.datastream.ConnectedStreams; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.ProcessFunction; +import org.apache.flink.streaming.api.functions.co.CoMapFunction; +import org.apache.flink.streaming.api.functions.source.SourceFunction; +import org.apache.flink.util.Collector; +import org.apache.flink.util.OutputTag; + +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +public class SplitStreamTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + DataStream device = env.addSource(new DeviceSource()); + + final OutputTag onlineTag = new OutputTag<>("online", TypeInformation.of(DeviceInfo.class)); + final OutputTag offlineTag = new OutputTag<>("offline", TypeInformation.of(DeviceInfo.class)); + + // 1 分流,online、offline + SingleOutputStreamOperator process = device.process(new ProcessFunction() { + @Override + public void processElement(DeviceInfo deviceInfo, Context context, Collector collector) throws Exception { + if (deviceInfo.getStatus() == 1) { + context.output(onlineTag, deviceInfo); + } else { + context.output(offlineTag, deviceInfo); + } + } + }); + + process.getSideOutput(onlineTag).print("online"); + process.getSideOutput(offlineTag).print("offline"); + + + // 2 合流 connect,将在线流转换成元组 + SingleOutputStreamOperator> onlineStream = process.getSideOutput(onlineTag).map(new MapFunction>() { + @Override + public Tuple3 map(DeviceInfo deviceInfo) throws Exception { + return new Tuple3<>(deviceInfo.getName(), deviceInfo.getCarNum(), deviceInfo.getTime()); + } + }); + + ConnectedStreams, DeviceInfo> connect = onlineStream.connect(process.getSideOutput(offlineTag)); + SingleOutputStreamOperator coMap = connect.map(new CoMapFunction, DeviceInfo, Object>() { + @Override + public Object map1(Tuple3 value) throws Exception { + return new Tuple3<>(value.f0, value.f2, "onlineItem"); + } + + @Override + public Object map2(DeviceInfo deviceInfo) throws Exception { + return new Tuple2<>(deviceInfo.getName(), "offlineItme"); + } + }); + + coMap.print("coMap"); + + env.execute("device job"); + } + + + public static class DeviceSource implements SourceFunction { + + private boolean running = true; + + @Override + public void run(SourceContext sourceContext) throws Exception { + while (running) { + Random random = new Random(); + + Map devsMap = new HashMap<>(); + for (int index = 0; index < 10; index++) { + devsMap.put("device_" + (index + 1), (int) random.nextInt(100)); + } + for (String dev : devsMap.keySet()) { + int status = devsMap.get(dev) % 2 == 0 ? 0 : 1; + sourceContext.collect(new DeviceInfo(dev, status, devsMap.get(dev), Instant.now().getEpochSecond())); + } + TimeUnit.SECONDS.sleep(1); + } + } + + @Override + public void cancel() { + running = false; + } + } +} diff --git a/src/main/java/com/kedacom/apitest/state/KeyedStateApplicationTest.java b/src/main/java/com/kedacom/apitest/state/KeyedStateApplicationTest.java new file mode 100644 index 0000000..8f0ed6b --- /dev/null +++ b/src/main/java/com/kedacom/apitest/state/KeyedStateApplicationTest.java @@ -0,0 +1,88 @@ +package com.kedacom.apitest.state; + +import com.kedacom.pojo.DeviceInfo; +import com.kedacom.pojo.DeviceStatusStt; +import org.apache.flink.api.common.functions.RichFlatMapFunction; +import org.apache.flink.api.common.state.ValueState; +import org.apache.flink.api.common.state.ValueStateDescriptor; +import org.apache.flink.configuration.Configuration; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.util.Collector; + +import static jdk.nashorn.internal.runtime.regexp.joni.Config.log; + +// +public class KeyedStateApplicationTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + // 文件转流 + + String file = "E:\\practice\\flink-test\\src\\main\\resources\\deviceinfo.txt"; + DataStreamSource inputStream = env.readTextFile(file); + + // 转换pojo + DataStream dataStream = inputStream.map(line -> { + String[] fields = line.split(","); + return new DeviceInfo(fields[0], new Integer(fields[1]), new Integer(fields[2]), new Long(fields[3])); + }); + + // 自定义keyed state,统计不同name个数 + dataStream.keyBy(DeviceInfo::getName) + .flatMap(new StatusSttFunction()).print(); + + + env.execute(); + } + + public static class StatusSttFunction extends RichFlatMapFunction{ + + private ValueState deviceStatusSttValueState; + + @Override + public void open(Configuration parameters) throws Exception { + deviceStatusSttValueState = getRuntimeContext().getState(new ValueStateDescriptor("status-stt", DeviceStatusStt.class)); + } + +// @Override +// public void close() throws Exception { +// deviceStatusSttValueState.clear(); +// } + + // 实时计算设备状态,持续时长、过车统计 + @Override + public void flatMap(DeviceInfo deviceInfo, Collector collector) throws Exception { + DeviceStatusStt devStatusStt = deviceStatusSttValueState.value(); + if(devStatusStt == null){ + devStatusStt = new DeviceStatusStt(); + devStatusStt.setName(deviceInfo.getName()); + devStatusStt.setStatus(deviceInfo.getStatus()); + devStatusStt.setTotalCarNum(deviceInfo.getCarNum()); + devStatusStt.setContinueDurationTime(0); + devStatusStt.setTime(deviceInfo.getTime()); + }else{ + if(devStatusStt.getTime() >= deviceInfo.getTime()){// 乱序数据,丢弃 + log.println("time error!!"); + return; + } + if(devStatusStt.getStatus() == deviceInfo.getStatus()){ + // 状态相同,去重,持续时长相加 + devStatusStt.setContinueDurationTime(devStatusStt.getContinueDurationTime() + deviceInfo.getTime() - devStatusStt.getTime()); + }else{ + // 状态不同,改变状态,重置持续时长 + devStatusStt.setContinueDurationTime(deviceInfo.getTime() - devStatusStt.getTime()); + devStatusStt.setStatus(deviceInfo.getStatus()); + } + // 过车总数增加 + devStatusStt.setTotalCarNum(devStatusStt.getTotalCarNum() + deviceInfo.getCarNum()); + // 时间设置为最新 + devStatusStt.setTime(deviceInfo.getTime()); + } + deviceStatusSttValueState.update(devStatusStt); + collector.collect(devStatusStt); + } + } +} diff --git a/src/main/java/com/kedacom/apitest/state/KeyedStateTest.java b/src/main/java/com/kedacom/apitest/state/KeyedStateTest.java new file mode 100644 index 0000000..58e4136 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/state/KeyedStateTest.java @@ -0,0 +1,64 @@ +package com.kedacom.apitest.state; + +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.api.common.functions.RichMapFunction; +import org.apache.flink.api.common.state.ValueState; +import org.apache.flink.api.common.state.ValueStateDescriptor; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.configuration.Configuration; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; + +public class KeyedStateTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + // 文件转流 + String file = "E:\\practice\\flink-test\\src\\main\\resources\\deviceinfo.txt"; + DataStreamSource inputStream = env.readTextFile(file); + + // 转换pojo + DataStream dataStream = inputStream.map(line -> { + String[] fields = line.split(","); + return new DeviceInfo(fields[0], new Integer(fields[1]), new Integer(fields[2]), new Long(fields[3])); + }); + + // 自定义keyed state,统计不同name个数 + dataStream.keyBy("name") + .map(new MyKeyedState()).print(); + + + env.execute(); + } + + public static class MyKeyedState extends RichMapFunction> { + + private ValueState keyCountState; + + @Override + public void open(Configuration parameters) throws Exception { + keyCountState = getRuntimeContext().getState(new ValueStateDescriptor("key-count", Integer.class)); + } + + @Override + public void close() throws Exception { + keyCountState.clear(); + } + + @Override + public Tuple2 map(DeviceInfo deviceInfo) throws Exception { + Integer count = keyCountState.value(); + if(count == null){ + count = 0; + } + count++; + keyCountState.update(count); + + return new Tuple2<>(deviceInfo.getName(), count); + } + } + +} diff --git a/src/main/java/com/kedacom/apitest/state/OpetateStateTest.java b/src/main/java/com/kedacom/apitest/state/OpetateStateTest.java new file mode 100644 index 0000000..bea71f6 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/state/OpetateStateTest.java @@ -0,0 +1,87 @@ +package com.kedacom.apitest.state; + +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.api.common.functions.MapFunction; +import org.apache.flink.api.common.functions.RichMapFunction; +import org.apache.flink.api.common.state.ValueState; +import org.apache.flink.api.common.state.ValueStateDescriptor; +import org.apache.flink.api.java.tuple.Tuple; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.configuration.Configuration; +import org.apache.flink.streaming.api.checkpoint.ListCheckpointed; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.table.expressions.In; + +import java.util.Collections; +import java.util.List; + +public class OpetateStateTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + // 文件转流 + String file = "E:\\practice\\flink-test\\src\\main\\resources\\deviceinfo.txt"; + DataStreamSource inputStream = env.readTextFile(file); + + // 转换pojo + DataStream dataStream = inputStream.map(line -> { + String[] fields = line.split(","); + return new DeviceInfo(fields[0], new Integer(fields[1]), new Integer(fields[2]), new Long(fields[3])); + }); + + + // 自定义mapper + SingleOutputStreamOperator countMap = dataStream + .keyBy(DeviceInfo::getName) + .map(new CountMapper()); + + countMap.print(); + + env.execute(); + } + + public static class MyCountMapper extends RichMapFunction>{ + + ValueState countState; + + @Override + public void open(Configuration parameters) throws Exception { + countState = getRuntimeContext().getState(new ValueStateDescriptor("count-value", Integer.class, 0)); + } + + @Override + public Tuple2 map(DeviceInfo deviceInfo) throws Exception { + int count = countState.value(); + count++; + countState.update(count); + return new Tuple2<>(deviceInfo.getName(), count); + } + } + + // 聚合求和,采用ListCheckpointed + public static class CountMapper implements MapFunction, ListCheckpointed { + + private Integer count = 0; + + @Override + public Integer map(DeviceInfo deviceInfo) throws Exception { + return count++; + } + + @Override + public List snapshotState(long l, long l1) throws Exception { + return Collections.singletonList(count); + } + + @Override + public void restoreState(List list) throws Exception { + for(Integer num : list){ + count += num; + } + } + } +} diff --git a/src/main/java/com/kedacom/apitest/tableapi/TableTest1.java b/src/main/java/com/kedacom/apitest/tableapi/TableTest1.java new file mode 100644 index 0000000..e642a58 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/tableapi/TableTest1.java @@ -0,0 +1,73 @@ +package com.kedacom.apitest.tableapi; + +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.table.api.Over; +import org.apache.flink.table.api.Table; +import org.apache.flink.table.api.Tumble; +import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; +import org.apache.flink.types.Row; + +public class TableTest1 { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + // 文件转流 + String file = "E:\\practice\\flink-test\\src\\main\\resources\\deviceinfo.txt"; + DataStreamSource inputStream = env.readTextFile(file); + + // 转换pojo + DataStream dataStream = inputStream.map(line -> { + String[] fields = line.split(","); + return new DeviceInfo(fields[0], new Integer(fields[1]), new Integer(fields[2]), new Long(fields[3])); + }).assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor(Time.seconds(30)) { + @Override + public long extractTimestamp(DeviceInfo deviceInfo) { + return deviceInfo.getTime() * 1000; + } + }); + + // 创建表环境,定义时间特性 + StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env); + // 采用pt.proctime +// Table dataTable = tableEnv.fromDataStream(dataStream, "name, status, carNum, time as ts, pt.proctime"); + + // 定义schema,采用rt作为rowtime + Table dataTable = tableEnv.fromDataStream(dataStream, "name, status, carNum, time as ts, rt.rowtime"); + + tableEnv.createTemporaryView("device", dataTable); + + // 窗口操作 + // group window + Table resultTable = dataTable.window(Tumble.over("10.seconds").on("rt").as("tw")) + .groupBy("name, tw") + .select("name, carNum.count, carNum.avg, tw.end");// 此处只能选择聚合字段 +// +// // sql + Table resultQuery = tableEnv.sqlQuery("select name, count(name), avg(carNum) as avtCarNum, tumble_end(rt, interval '10' second) from" + + " device group by name, tumble(rt, interval '10' second)"); + + // over window + Table overResult = dataTable.window(Over.partitionBy("name").orderBy("rt").preceding("2.rows").as("ow")) + .select("name, carNum.count over ow, carNum.avg over ow"); + + Table overSql = tableEnv.sqlQuery("select name, rt, count(name) over ow, avg(carNum) over ow " + + "from device " + + " window ow as (partition by name order by rt rows between 2 preceding and current row)"); + + + dataTable.printSchema(); + tableEnv.toAppendStream(dataTable, Row.class).print("stream"); + tableEnv.toRetractStream(resultTable, Row.class).print("result"); + tableEnv.toRetractStream(resultQuery, Row.class).print("query"); + tableEnv.toRetractStream(overResult, Row.class).print("overResult"); + tableEnv.toRetractStream(overSql, Row.class).print("oversql"); + + env.execute(); + } +} diff --git a/src/main/java/com/kedacom/apitest/tableapi/udf/UdfAggregateFunctionTest.java b/src/main/java/com/kedacom/apitest/tableapi/udf/UdfAggregateFunctionTest.java new file mode 100644 index 0000000..4ca434b --- /dev/null +++ b/src/main/java/com/kedacom/apitest/tableapi/udf/UdfAggregateFunctionTest.java @@ -0,0 +1,75 @@ +package com.kedacom.apitest.tableapi.udf; + +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.table.api.Table; +import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; +import org.apache.flink.table.codegen.GeneratedAggregationsFunction; +import org.apache.flink.table.expressions.In; +import org.apache.flink.table.functions.AggregateFunction; +import org.apache.flink.table.runtime.aggregate.AggregateAggFunction; +import org.apache.flink.types.Row; + +public class UdfAggregateFunctionTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + // 文件转流 + String file = "E:\\practice\\flink-test\\src\\main\\resources\\deviceinfo.txt"; + DataStreamSource inputStream = env.readTextFile(file); + + // 转换pojo + DataStream dataStream = inputStream.map(line -> { + String[] fields = line.split(","); + return new DeviceInfo(fields[0], new Integer(fields[1]), new Integer(fields[2]), new Long(fields[3])); + }); + + // 创建表环境,定义时间特性 + StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env); + // 流转换成表 + Table dataTable = tableEnv.fromDataStream(dataStream, "name, status, carNum, time as ts, pt.proctime"); + + // 自定义聚合函数,求carNum平均值 + AverageCarNum averageCarNum = new AverageCarNum(); + // table Api + tableEnv.registerFunction("avgCarNum", averageCarNum); + Table resultTable = dataTable + .groupBy("name") + .aggregate("avgCarNum(carNum) as avgNum") + .select("name, avgNum"); + + // sql + // 注册表 + tableEnv.createTemporaryView("device", dataTable); + Table sqlResult = tableEnv.sqlQuery("select name, avgCarNum(carNum) from device group by name"); + + tableEnv.toRetractStream(resultTable, Row.class).print("result"); + tableEnv.toRetractStream(sqlResult, Row.class).print("sql"); + + env.execute(); + + } + + public static class AverageCarNum extends AggregateFunction>{ + + @Override + public Double getValue(Tuple2 agg) { + return agg.f0 / agg.f1; + } + + @Override + public Tuple2 createAccumulator() { + return new Tuple2<>(0.0, 0); + } + + // 必须实现accumulate方法,来数据后更新状态 + public void accumulate(Tuple2 accumulator, Integer tmp){ + accumulator.f0 += tmp; + accumulator.f1 ++; + } + } +} diff --git a/src/main/java/com/kedacom/apitest/tableapi/udf/UdfScalarFunctionTest.java b/src/main/java/com/kedacom/apitest/tableapi/udf/UdfScalarFunctionTest.java new file mode 100644 index 0000000..5895127 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/tableapi/udf/UdfScalarFunctionTest.java @@ -0,0 +1,63 @@ +package com.kedacom.apitest.tableapi.udf; + +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.table.api.Table; +import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; +import org.apache.flink.table.functions.ScalarFunction; +import org.apache.flink.types.Row; + +public class UdfScalarFunctionTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + // 文件转流 + String file = "E:\\practice\\flink-test\\src\\main\\resources\\deviceinfo.txt"; + DataStreamSource inputStream = env.readTextFile(file); + + // 转换pojo + DataStream dataStream = inputStream.map(line -> { + String[] fields = line.split(","); + return new DeviceInfo(fields[0], new Integer(fields[1]), new Integer(fields[2]), new Long(fields[3])); + }); + + // 创建表环境,定义时间特性 + StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env); + // 流转换成表 + Table dataTable = tableEnv.fromDataStream(dataStream, "name, status, carNum, time as ts, pt.proctime"); + + // 自定义标量函数,实现name的hash值 + HashCode hashCode = new HashCode(5); + // table Api + tableEnv.registerFunction("hashCode", hashCode); + Table resultTable = dataTable.select("name, carNum, hashCode(name), ts"); + + // sql + // 注册表 + tableEnv.createTemporaryView("device", dataTable); + Table sqlResult = tableEnv.sqlQuery("select name, carNum, hashCode(name), ts from device"); + + tableEnv.toAppendStream(resultTable, Row.class).print("result"); + tableEnv.toAppendStream(sqlResult, Row.class).print("sql"); + + env.execute(); + + } + + // 自定义scalar function + public static class HashCode extends ScalarFunction{ + private int factor = 3; + + public HashCode(int factor) { + this.factor = factor; + } + + // 必须实现 eval 函数 + public int eval(String name){ + return name.hashCode() * factor; + } + } +} diff --git a/src/main/java/com/kedacom/apitest/tableapi/udf/UdfTableFunctionTest.java b/src/main/java/com/kedacom/apitest/tableapi/udf/UdfTableFunctionTest.java new file mode 100644 index 0000000..2143093 --- /dev/null +++ b/src/main/java/com/kedacom/apitest/tableapi/udf/UdfTableFunctionTest.java @@ -0,0 +1,70 @@ +package com.kedacom.apitest.tableapi.udf; + +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.table.api.Table; +import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; +import org.apache.flink.table.functions.TableFunction; +import org.apache.flink.types.Row; + +public class UdfTableFunctionTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + // 文件转流 + String file = "E:\\practice\\flink-test\\src\\main\\resources\\deviceinfo.txt"; + DataStreamSource inputStream = env.readTextFile(file); + + // 转换pojo + DataStream dataStream = inputStream.map(line -> { + String[] fields = line.split(","); + return new DeviceInfo(fields[0], new Integer(fields[1]), new Integer(fields[2]), new Long(fields[3])); + }); + + // 创建表环境,定义时间特性 + StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env); + // 流转换成表 + Table dataTable = tableEnv.fromDataStream(dataStream, "name, status, carNum, time as ts, pt.proctime"); + + // 将name拆分,拆成名字+数字 + SplitName splitName = new SplitName("_"); + // table Api + tableEnv.registerFunction("splitName", splitName); + Table resultTable = dataTable + .joinLateral("splitName(name) as (word, length)") + .select("name, carNum, word, length"); + + // sql + // 注册表 + tableEnv.createTemporaryView("device", dataTable); + Table sqlResult = tableEnv.sqlQuery("select name, carNum, word, length, ts from device " + + ", lateral table(splitName(name)) as split(word, length)"); + + tableEnv.toAppendStream(resultTable, Row.class).print("result"); + tableEnv.toAppendStream(sqlResult, Row.class).print("sql"); + + env.execute(); + + } + + // 自定义table function + public static class SplitName extends TableFunction> { + + private String seprator = "_"; + + public SplitName(String seprator) { + this.seprator = seprator; + } + + public void eval(String name) { + String[] fields = name.split(seprator); + for (String str : fields) { + collect(new Tuple2(str, str.length())); + } + } + } +} diff --git a/src/main/java/com/kedacom/apitest/window/SocketWindowTest.java b/src/main/java/com/kedacom/apitest/window/SocketWindowTest.java new file mode 100644 index 0000000..895426d --- /dev/null +++ b/src/main/java/com/kedacom/apitest/window/SocketWindowTest.java @@ -0,0 +1,115 @@ +package com.kedacom.apitest.window; + +import com.kedacom.pojo.CarNumCount; +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.api.common.functions.AggregateFunction; +import org.apache.flink.api.common.functions.MapFunction; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.api.java.utils.ParameterTool; +import org.apache.flink.streaming.api.TimeCharacteristic; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.aggregation.AggregationFunction; +import org.apache.flink.streaming.api.functions.source.SourceFunction; +import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor; +import org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction; +import org.apache.flink.streaming.api.functions.windowing.WindowFunction; +import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.streaming.api.windowing.windows.TimeWindow; +import org.apache.flink.util.Collector; + +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; + +public class SocketWindowTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + // 1 设置socket信息 + ParameterTool parameterTool = ParameterTool.fromArgs(args); +// String host = parameterTool.get("host"); +// int port = parameterTool.getInt("port"); + String host = "172.16.64.85"; + int port = 8888; + + + // 2 从socket读取数据 + DataStream inputDataStream = env.socketTextStream(host, port); + + DataStream mapStream = inputDataStream.map(new MapFunction() { + @Override + public DeviceInfo map(String s) throws Exception { + String[] fields = s.split(","); + return new DeviceInfo(fields[0], new Integer(fields[1]), new Integer(fields[2]), new Long(fields[3])); + } + }); + + SingleOutputStreamOperator> resultStream = mapStream + .assignTimestampsAndWatermarks( + new BoundedOutOfOrdernessTimestampExtractor(Time.seconds(2)) { + @Override + public long extractTimestamp(DeviceInfo deviceInfo) { + return deviceInfo.getTime() * 1000; + } + }) + .keyBy(DeviceInfo::getName) + .window(TumblingEventTimeWindows.of(Time.seconds(10))) + .aggregate(new AggregateFunction, Tuple2>() { + @Override + public Tuple2 createAccumulator() { + return new Tuple2<>("", 0L); + } + + @Override + public Tuple2 add(DeviceInfo deviceInfo, Tuple2 value) { + value.f0 = deviceInfo.getName(); + value.f1 += deviceInfo.getCarNum(); + return value; + } + + @Override + public Tuple2 getResult(Tuple2 stringLongTuple2) { + return stringLongTuple2; + } + + @Override + public Tuple2 merge(Tuple2 stringLongTuple2, Tuple2 acc1) { + stringLongTuple2.f1 += acc1.f1; + return stringLongTuple2; + } + }); + mapStream.print("data"); + resultStream.print("sum"); +// +// // 2 全窗口测试 +// SingleOutputStreamOperator apply = deviceStream.keyBy(devic -> devic.getName()) +// .timeWindow(Time.seconds(5)) +// .apply(new WindowFunction() { +// @Override +// public void apply(String s, TimeWindow timeWindow, Iterable iterable, Collector collector) throws Exception { +// AtomicInteger total = new AtomicInteger(); +// AtomicReference deviceInfo = new AtomicReference<>(); +// iterable.forEach(dev -> { +// total.addAndGet(dev.getCarNum()); +// deviceInfo.set(dev); +// }); +// if (deviceInfo != null) { +// deviceInfo.get().setCarNum(total.get()); +// } +// +// collector.collect(deviceInfo.get()); +// } +// }); +// apply.print("apply"); +// + env.execute("device job"); + } +} diff --git a/src/main/java/com/kedacom/apitest/window/WatermarkTest.java b/src/main/java/com/kedacom/apitest/window/WatermarkTest.java new file mode 100644 index 0000000..603b3ee --- /dev/null +++ b/src/main/java/com/kedacom/apitest/window/WatermarkTest.java @@ -0,0 +1,262 @@ +package com.kedacom.apitest.window; + +import com.kedacom.pojo.CarNumCount; +import com.kedacom.pojo.DeviceInfo; +import com.kedacom.pojo.DeviceStatusStt; +import org.apache.commons.compress.utils.Lists; +import org.apache.flink.api.common.eventtime.*; +import org.apache.flink.api.common.functions.AggregateFunction; +import org.apache.flink.api.common.state.ListState; +import org.apache.flink.api.common.state.ListStateDescriptor; +import org.apache.flink.api.java.tuple.Tuple; +import org.apache.flink.configuration.Configuration; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.KeyedProcessFunction; +import org.apache.flink.streaming.api.functions.source.SourceFunction; +import org.apache.flink.streaming.api.functions.windowing.WindowFunction; +import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.streaming.api.windowing.windows.TimeWindow; +import org.apache.flink.streaming.api.windowing.windows.Window; +import org.apache.flink.table.runtime.aggregate.AggregateAggFunction; +import org.apache.flink.util.Collector; +import org.apache.flink.util.OutputTag; +import scala.collection.Iterable; + +import java.awt.*; +import java.sql.Timestamp; +import java.time.Instant; +import java.util.*; +import java.util.concurrent.TimeUnit; + +public class WatermarkTest { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + + DataStream deviceStream = env.addSource(new DeviceSource()); +// +// env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime); +// env.getConfig().setAutoWatermarkInterval(100); + +// // 1 开窗测试,按照process时间来开窗 +// SingleOutputStreamOperator dataStream = deviceStream +// .keyBy(dev -> dev.getName()) +// .window(TumblingProcessingTimeWindows.of(Time.seconds(10))) +// .min("carNum"); +// +// deviceStream.print("data"); +// dataStream.print("window"); + + // 2 按照eventTime开窗 +// SingleOutputStreamOperator carNum = deviceStream.assignTimestampsAndWatermarks( +// WatermarkStrategy +// .forBoundedOutOfOrderness(Duration.ofSeconds(2)) +// .withTimestampAssigner(new MyTimeAssigner())) +// .keyBy(dev -> dev.getName()) +//// .timeWindow(Time.seconds(10)) +// .window(TumblingEventTimeWindows.of(Time.seconds(10))) +// .min("carNum"); +// +// deviceStream.print("data"); +// carNum.print("window"); + + // 3 自定义函数watermark + SingleOutputStreamOperator resultStream = deviceStream.assignTimestampsAndWatermarks( + new MyTimestampAndWatermarks().withTimestampAssigner(new MyTimeAssigner()) + ) + .keyBy(dev -> dev.getName()) + .timeWindow(Time.seconds(60), Time.seconds(10)) +// .aggregate(new CarCountAgg(), new ResultWindow()); + .min("carNum"); + + + deviceStream.print("data"); + resultStream.print("min"); + +// deviceStream.print("data"); +// carNum.print("window"); + + // 4 延迟和侧输出流 +// OutputTag outputTag = new OutputTag<>("late"); +// SingleOutputStreamOperator outputStreamOperator = deviceStream.assignTimestampsAndWatermarks( +// new MyTimestampAndWatermarks().withTimestampAssigner(new MyTimeAssigner())) +// .keyBy(dev -> dev.getName()) +// .window(TumblingEventTimeWindows.of(Time.seconds(10))) +// .allowedLateness(Time.minutes(1)) +// .sideOutputLateData(outputTag) +// .min("carNum"); +// +// outputStreamOperator.getSideOutput(outputTag).print("output"); + + + env.execute("device job"); + } + + public static class MyTimeAssigner implements TimestampAssignerSupplier { + + @Override + public TimestampAssigner createTimestampAssigner(Context context) { + return new TimestampAssigner() { + @Override + public long extractTimestamp(DeviceInfo deviceInfo, long l) { + return deviceInfo.getTime() * 1000; + } + }; + } + } + + public static class MyTimestampAndWatermarks implements WatermarkStrategy { + + @Override + public WatermarkGenerator createWatermarkGenerator(WatermarkGeneratorSupplier.Context context) { + return new WatermarkGenerator() { + + private long delay = 10000; + private long maxTimestamp = Long.MIN_VALUE + delay + 1L; + + @Override + // 每条数据都会调用OnEvent,在这个方法里定义maxTimestamp + public void onEvent(DeviceInfo deviceInfo, long l, WatermarkOutput watermarkOutput) { + maxTimestamp = Math.max(maxTimestamp, deviceInfo.getTime() * 1000); + } + + // 周期性生成watermark + @Override + public void onPeriodicEmit(WatermarkOutput watermarkOutput) { + watermarkOutput.emitWatermark(new Watermark(maxTimestamp - delay)); + } + }; + } + } + + // 自定义聚合 + public static class CarCountAgg implements AggregateFunction { + + @Override + public Long createAccumulator() { + return 0L; + } + + @Override + public Long add(DeviceInfo deviceInfo, Long aLong) { + return aLong + 1; + } + + @Override + public Long getResult(Long aLong) { + return aLong; + } + + @Override + public Long merge(Long aLong, Long acc1) { + return aLong + acc1; + } + } + + // 自定义全窗口函数 + public static class ResultWindow implements WindowFunction { + + @Override + public void apply(String s, TimeWindow timeWindow, java.lang.Iterable iterable, Collector collector) throws Exception { + String name = s; + Long windowEnd = timeWindow.getEnd(); + Integer count = iterable.iterator().next().intValue(); + + collector.collect(new CarNumCount(name, count, windowEnd)); + } + } + + // 自定义processfunciton + public static class TopNHotCarNum extends KeyedProcessFunction { + + private int topN = 5; + + public TopNHotCarNum(int topN) { + this.topN = topN; + } + + // 保持当前窗口类所有输出的CarNumCount + ListState carNumCountListState; + + @Override + public void open(Configuration parameters) throws Exception { + carNumCountListState = getRuntimeContext().getListState(new ListStateDescriptor("carnum-count-list", CarNumCount.class)); + } + + @Override + public void processElement(CarNumCount carNumCount, Context context, Collector collector) throws Exception { + carNumCountListState.add(carNumCount); + + context.timerService().registerEventTimeTimer(carNumCount.getTimewindowEnd() + 1); + } + + @Override + public void onTimer(long timestamp, OnTimerContext ctx, Collector out) throws Exception { + ArrayList countArrayList = Lists.newArrayList(carNumCountListState.get().iterator()); + + countArrayList.sort(new Comparator() { + @Override + public int compare(CarNumCount o1, CarNumCount o2) { + if (o1.getTotalCarNum() > o2.getTotalCarNum()) + return -1; + else if (o1.getTotalCarNum() == o2.getTotalCarNum()) + return 0; + else + return 1; + } + }); + + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("===================\n"); + stringBuilder.append("窗口结束时间:").append(new Timestamp(timestamp - 1)).append("\n"); + + for (int index = 0; index < Math.min(topN, countArrayList.size()); index++) { + CarNumCount carNumCount = countArrayList.get(index); + stringBuilder.append("NO ").append(index + 1).append(":\n") + .append("name = ").append(carNumCount.getName()).append("\n") + .append("totalCatNum = ").append(carNumCount.getTotalCarNum()) + .append("\n\n"); + } + stringBuilder.append("==========================\n\n"); + + TimeUnit.SECONDS.sleep(1); + + out.collect(stringBuilder.toString()); + + carNumCountListState.clear(); + } + } + + public static class DeviceSource implements SourceFunction { + + private boolean running = true; + + @Override + public void run(SourceContext sourceContext) throws Exception { + while (running) { + Random random = new Random(); + + Map devsMap = new HashMap<>(); + for (int index = 0; index < 4; index++) { + if (random.nextInt(5) % 2 == 0) { + devsMap.put("device_" + (index + 1), (int) random.nextInt(100)); + } + } + for (String dev : devsMap.keySet()) { + int status = devsMap.get(dev) % 2 == 0 ? 0 : 1; + sourceContext.collect(new DeviceInfo(dev, status, devsMap.get(dev), Instant.now().getEpochSecond())); + } + TimeUnit.SECONDS.sleep(1); + } + } + + @Override + public void cancel() { + running = false; + } + } + + +} diff --git a/src/main/java/com/kedacom/apitest/window/WindowTest1.java b/src/main/java/com/kedacom/apitest/window/WindowTest1.java new file mode 100644 index 0000000..e7315bf --- /dev/null +++ b/src/main/java/com/kedacom/apitest/window/WindowTest1.java @@ -0,0 +1,116 @@ +package com.kedacom.apitest.window; + +import com.kedacom.apitest.source.SelfSourceTest; +import com.kedacom.pojo.DeviceInfo; +import org.apache.flink.api.common.functions.AggregateFunction; +import org.apache.flink.streaming.api.TimeCharacteristic; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.source.SourceFunction; +import org.apache.flink.streaming.api.functions.windowing.WindowFunction; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.streaming.api.windowing.windows.TimeWindow; +import org.apache.flink.util.Collector; + +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; + +public class WindowTest1 { + public static void main(String[] args) throws Exception { + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime); + env.setParallelism(1); + + + DataStream deviceStream = env.addSource(new DeviceSource()); + + // 1 开窗测试,增量聚合 + SingleOutputStreamOperator aggregate = deviceStream.keyBy(device -> device.getName()). +// window(EventTimeSessionWindows.withGap(Time.seconds(30))); +// countWindow(30); + timeWindow(Time.seconds(5)). +// window(TumblingEventTimeWindows.of(Time.seconds(30))). +// min("carNum"); + aggregate(new AggregateFunction() { + + @Override + public DeviceInfo createAccumulator() { + return new DeviceInfo(); + } + + @Override + public DeviceInfo add(DeviceInfo deviceInfo, DeviceInfo deviceInfo2) { + deviceInfo.setCarNum(deviceInfo.getCarNum() + deviceInfo2.getCarNum()); + return deviceInfo; + } + + @Override + public DeviceInfo getResult(DeviceInfo deviceInfo) { + return deviceInfo; + } + + @Override + public DeviceInfo merge(DeviceInfo deviceInfo, DeviceInfo acc1) { + return null; + } + }); + deviceStream.print("data"); + aggregate.print("agg"); + + // 2 全窗口测试 + SingleOutputStreamOperator apply = deviceStream.keyBy(devic -> devic.getName()) + .timeWindow(Time.seconds(5)) + .apply(new WindowFunction() { + @Override + public void apply(String s, TimeWindow timeWindow, Iterable iterable, Collector collector) throws Exception { + AtomicInteger total = new AtomicInteger(); + AtomicReference deviceInfo = new AtomicReference<>(); + iterable.forEach(dev -> { + total.addAndGet(dev.getCarNum()); + deviceInfo.set(dev); + }); + if(deviceInfo != null){ + deviceInfo.get().setCarNum(total.get()); + } + + collector.collect(deviceInfo.get()); + } + }); + apply.print("apply"); + + env.execute("device job"); + } + + public static class DeviceSource implements SourceFunction { + + private boolean running = true; + + @Override + public void run(SourceContext sourceContext) throws Exception { + while (running) { + Random random = new Random(); + + Map devsMap = new HashMap<>(); + for (int index = 0; index < 2; index++) { + devsMap.put("device_" + (index + 1), (int) random.nextInt(100)); + } + for (String dev : devsMap.keySet()) { + int status = devsMap.get(dev) % 2 == 0 ? 0 : 1; + sourceContext.collect(new DeviceInfo(dev, status, devsMap.get(dev), Instant.now().getEpochSecond())); + } + TimeUnit.SECONDS.sleep(2); + } + } + + @Override + public void cancel() { + running = false; + } + } +} diff --git a/src/main/java/com/kedacom/pojo/CarNumCount.java b/src/main/java/com/kedacom/pojo/CarNumCount.java new file mode 100644 index 0000000..fa1de2d --- /dev/null +++ b/src/main/java/com/kedacom/pojo/CarNumCount.java @@ -0,0 +1,14 @@ +package com.kedacom.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CarNumCount { + private String name; + private int totalCarNum; // 过车数量 + private Long timewindowEnd; +} diff --git a/src/main/java/com/kedacom/pojo/DeviceInfo.java b/src/main/java/com/kedacom/pojo/DeviceInfo.java new file mode 100644 index 0000000..86e866b --- /dev/null +++ b/src/main/java/com/kedacom/pojo/DeviceInfo.java @@ -0,0 +1,16 @@ +package com.kedacom.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DeviceInfo { + private String name; + private int status; + private int carNum; // 过车数量 + private long time; + +} diff --git a/src/main/java/com/kedacom/pojo/DeviceStatusStt.java b/src/main/java/com/kedacom/pojo/DeviceStatusStt.java new file mode 100644 index 0000000..c5a7f9f --- /dev/null +++ b/src/main/java/com/kedacom/pojo/DeviceStatusStt.java @@ -0,0 +1,16 @@ +package com.kedacom.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DeviceStatusStt { + private String name; + private int status; + private long continueDurationTime; // 持续在线/离线时长 + private int totalCarNum; // 过车数量 + private long time; // 最新时间 +} diff --git a/src/main/java/com/kedacom/wc/SocketWordCount.java b/src/main/java/com/kedacom/wc/SocketWordCount.java new file mode 100644 index 0000000..30aa5f6 --- /dev/null +++ b/src/main/java/com/kedacom/wc/SocketWordCount.java @@ -0,0 +1,52 @@ +package com.kedacom.wc; + +import lombok.extern.slf4j.Slf4j; +import org.apache.flink.api.common.functions.FlatMapFunction; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.api.java.utils.ParameterTool; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.util.Collector; + +@Slf4j +// 提交参数 +// com.kedacom.wc.StreamWordCount +// --host 172.16.64.85 --port 9999 +public class SocketWordCount { + public static void main(String[] args) throws Exception { + System.out.println("test"); + log.info("socket wrod count test!"); + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + + // 1 设置socket信息 + ParameterTool parameterTool = ParameterTool.fromArgs(args); + String host = parameterTool.get("host"); + int port = parameterTool.getInt("port"); +// String host = "172.16.64.85"; +// int port = 9999; + + + // 2 从socket读取数据 + DataStream inputDataStream = env.socketTextStream(host, port); + + DataStream> sum = inputDataStream.flatMap(new MyFlatMap()) + .keyBy(0) + .sum(1); + + sum.print("sum"); + + env.execute("socket stream word count job"); + } + + public static class MyFlatMap implements FlatMapFunction> { + + @Override + public void flatMap(String s, Collector> out) throws Exception { + String words[] = s.split(" "); + for(String word : words){ + out.collect(new Tuple2<>(word, 1)); + } + } + } +} diff --git a/src/main/java/com/kedacom/wc/StreamWordCount.java b/src/main/java/com/kedacom/wc/StreamWordCount.java new file mode 100644 index 0000000..00507e3 --- /dev/null +++ b/src/main/java/com/kedacom/wc/StreamWordCount.java @@ -0,0 +1,42 @@ +package com.kedacom.wc; + +import org.apache.flink.api.common.functions.FlatMapFunction; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.api.java.utils.ParameterTool; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.util.Collector; + +// 提交参数 +// com.kedacom.wc.StreamWordCount +// --host 172.16.64.85 --port 9999 +public class StreamWordCount { + public static void main(String[] args) throws Exception { + System.out.println("test"); + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(2); + + // 1 用文件模拟流数据 + String file = "E:\\practice\\flink-test\\src\\main\\resources\\hello.txt"; + DataStream inputDataStream = env.readTextFile(file); + + DataStream> sum = inputDataStream.flatMap(new MyFlatMap()) + .keyBy(0) + .sum(1); + + sum.print(); + + env.execute(); + } + + public static class MyFlatMap implements FlatMapFunction> { + + @Override + public void flatMap(String s, Collector> out) throws Exception { + String words[] = s.split(" "); + for(String word : words){ + out.collect(new Tuple2<>(word, 1)); + } + } + } +} diff --git a/src/main/java/com/kedacom/wc/WordCount.java b/src/main/java/com/kedacom/wc/WordCount.java new file mode 100644 index 0000000..7d3f95b --- /dev/null +++ b/src/main/java/com/kedacom/wc/WordCount.java @@ -0,0 +1,35 @@ +package com.kedacom.wc; + +import org.apache.flink.api.common.functions.FlatMapFunction; +import org.apache.flink.api.java.DataSet; +import org.apache.flink.api.java.ExecutionEnvironment; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.util.Collector; + +public class WordCount { + public static void main(String[] args) throws Exception { + System.out.println("test"); + ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); + + String file = "E:\\practice\\flink-test\\src\\main\\resources\\hello.txt"; + DataSet data = env.readTextFile(file); + + DataSet> out = data + .flatMap(new MyFlatMap()) + .groupBy(0) + .sum(1); + + out.print(); + } + + public static class MyFlatMap implements FlatMapFunction> { + + @Override + public void flatMap(String s, Collector> out) throws Exception { + String words[] = s.split(" "); + for(String word : words){ + out.collect(new Tuple2<>(word, 1)); + } + } + } +} diff --git a/src/main/resources/carnum.txt b/src/main/resources/carnum.txt new file mode 100644 index 0000000..2be74d3 --- /dev/null +++ b/src/main/resources/carnum.txt @@ -0,0 +1,12 @@ +"dev_1",0,10,1625819869 +"dev_2",1,20,1625819869 +"dev_3",0,40,1625819869 +"dev_4",1,2,1625819869 +"dev_5",1,5,1625819869 +"dev_3",0,40,1625819870 +"dev_1",0,60,1625819873 +"dev_1",0,30,1625819875 +"dev_1",1,30,1625819880 +"dev_1",1,10,1625819895 +"dev_1",1,10,1625819869 +"dev_1",1,10,1625819999 \ No newline at end of file diff --git a/src/main/resources/deviceinfo.txt b/src/main/resources/deviceinfo.txt new file mode 100644 index 0000000..b4523df --- /dev/null +++ b/src/main/resources/deviceinfo.txt @@ -0,0 +1,12 @@ +"dev_1",0,10,1625819869 +"dev_1",0,10,1625819865 +"dev_2",1,20,1625819869 +"dev_3",0,40,1625819869 +"dev_4",1,2,1625819869 +"dev_5",1,5,1625819869 +"dev_3",0,40,1625819870 +"dev_1",0,60,1625819873 +"dev_1",0,30,1625819875 +"dev_1",1,30,1625819880 +"dev_1",1,10,1625819895 +"dev_1",1,10,1625857320 \ No newline at end of file diff --git a/src/main/resources/hello.txt b/src/main/resources/hello.txt new file mode 100644 index 0000000..4c3331a --- /dev/null +++ b/src/main/resources/hello.txt @@ -0,0 +1,6 @@ +hello world +hello scala +hello java +hello flink +test for flink +nothing \ No newline at end of file diff --git a/src/main/resources/log4j2.properties b/src/main/resources/log4j2.properties new file mode 100644 index 0000000..8e59a23 --- /dev/null +++ b/src/main/resources/log4j2.properties @@ -0,0 +1,28 @@ +################################################################################ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +rootLogger.level = WARNING +rootLogger.appenderRef.console.ref = ConsoleAppender + +logger.sink.name = org.apache.flink.walkthrough.common.sink.AlertSink +logger.sink.level = INFO + +appender.console.name = ConsoleAppender +appender.console.type = CONSOLE +appender.console.layout.type = PatternLayout +appender.console.layout.pattern = %d{HH:mm:ss,SSS} %-5p %-60c %x - %m%n diff --git a/target/classes/carnum.txt b/target/classes/carnum.txt new file mode 100644 index 0000000..2be74d3 --- /dev/null +++ b/target/classes/carnum.txt @@ -0,0 +1,12 @@ +"dev_1",0,10,1625819869 +"dev_2",1,20,1625819869 +"dev_3",0,40,1625819869 +"dev_4",1,2,1625819869 +"dev_5",1,5,1625819869 +"dev_3",0,40,1625819870 +"dev_1",0,60,1625819873 +"dev_1",0,30,1625819875 +"dev_1",1,30,1625819880 +"dev_1",1,10,1625819895 +"dev_1",1,10,1625819869 +"dev_1",1,10,1625819999 \ No newline at end of file diff --git a/target/classes/com/kedacom/apitest/function/StatusStatisticsByDay$1.class b/target/classes/com/kedacom/apitest/function/StatusStatisticsByDay$1.class new file mode 100644 index 0000000000000000000000000000000000000000..2fe6ecf60ce113d75a8cfb75b628df8a56c77b28 GIT binary patch literal 1188 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/function/StatusStatisticsByDay.class b/target/classes/com/kedacom/apitest/function/StatusStatisticsByDay.class new file mode 100644 index 0000000000000000000000000000000000000000..2e4f3176b77a308c9d3a1ebf5bf479f1071ade11 GIT binary patch literal 6996 zcmb_h349dQ8UH_$&1}X2!WvKzFksL?fR)G{Kp_c`us~`eX|#uv-N|Oi?#!|~8;G{G zwN`sq?P*V2TWxDw(bf%;s)y@NT*Ap1`x-?+H12uZs8KRu%8Z z2MXI&6}RDo3O=M_spRf9+#bXo64Qr+_=qI?Q5ARMV=6w5PXuw7Y>x(!l9PAK&pknW zQc8AI4n7scy|T>(F(TVzLEIsrh|j3lhKGXqti<^_1@|fV zyoy#lBtKtJ@I@87QvCl2UoQ;zeKmCk@k9BU&{ zI~g7{V!CYgl<625C)}U4qK;`>;VwsavKjd`GmaU}>=-65&7_soO-o>2!xfQ(`j8$@ z=vJJ-Y14`~yS(V>II*8uVwvn3){wxih@Fm;q8=SE!u<);8VqNgw4o=7LoyO3l$o}z zq+vM{HCNh>7}2cctF5?1W`b!WV`tM*iaN_<$1{c7|!CvW~Z1U`sigG2PKU zF2b$sdi%Ou*z`U88zCie!E%Xy?q*ZCs#%ZD@%WJ z9o5OE5=OXNew#`NHyMY8IB>|OWK?ZC5;aoN6*CGRrlZ%#jEunmOPE&~5k1)#)9VE` zH2BnKT0{1r5$-BL#XPX)emRY@$*Dqb|ZE&v0cM3+8Ld09+?p9V?TpQ>L5+ z1%-`E9INGi4g1ll;A;E;E+m>kis|ny3(!iU??;3ZrxPMuOBf__ybMoe@xyS)xnwz$>!LXezo^MN&@*H2G&Fo0}}-XrGFaw|0v5@!m`@!_-_BW_TmwbDYf ziVG3jifdx7m?t-%MYk_5dCFzhDo*)$@d0`|6KI>DGRDuek7|LlXz)^pxIjB?by|ot zQwbTv>D1FYwVg0CJYzc=+D{+$iS9FA7u{ykXc-{+sKZn*t0sZ!wjtVEt_WOIPR@x4 zDAPHViPoUbCoT)DZ#V^{vQDd}L0W99-;6VeOPN5%aXvK04CieiQ;icWHaWP!*%V=W z*0FnZDkiC?2ixhoX}Z0@g$*4g3^X}1(w<%PUAG`+T}4?g9jgSF`m>4W$AzP|SRHCE zlKj}qZ=Jd`z)G8%j&&PH9Pc>mEQxG_^y3|2s#;PNXN&nN_J{=n>&oc8WJ;n2HlI3u zfvZb+j8EUCX_m0jq#{pVo{{yYGOQmqt(eVEJnS%L!d~Dg86#?2veej6(p|>0QUV1D zvm%>5Y4=9cT4tZm+LMbeu!wgzGj2(Vc;qHineA3=EFdV_O=TG@nr6F;%1HN^&Oj$~ zjU6+iMO^gu)4_5xZ=~WJw{G;GekYu`h0yZf1DWb3^K3Wlih}qm1KMcq$+KO&t_TDM zjo}@`0tZWIPXAbt{%IGW8y0v+qqNFPv{?+{SJ`!!`Q_FIalwh88A_EfgEZ^ zF{if{p<}2W!Q33?ZLXYOc^qfSwX@Y@m|u$p$FT4i7Ui(G7UvQ!hb5y}+B<^ta;V=N zm>&o&%i;W<#?S>hH1tUJD_r)sNeVcZverSR>~r|kzYxn%kMpq#%dr(Ju^VeC-Z~iA zfHXGZFgEl55L<9PSEbn7Jkjuc^m0_me@tACE2xTkMDYT=kSbWknHS;3q`4ax<4Wj+ zI*c0h5h8#XchzytgEGdT`p2N+gc@*h3z#)34q}k_rD8V`T0T8Jz9NU^kr`X5&J}lZ z+{C{bPhI`7tk`-7W;KRZxuZbk)`fBlgF+hB`z>H2_r{2K zb?{c)$Tl3hFo!j_;5zo3LKnIHBkZpYt#kVc_Sc6txcw{H-x%8D_PbqE9p%jGnyOpT z#!fi2*qA@I`MKVl`x{vvol*WvYe1KyY)y#u$%(Q|WC BrTG8= literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/function/TopNFunction$1.class b/target/classes/com/kedacom/apitest/function/TopNFunction$1.class new file mode 100644 index 0000000000000000000000000000000000000000..b9573154e53f9cc373dcbdb71a04ea549c177d97 GIT binary patch literal 1014 zcmb_a%Wl&^6g|^CoESsf&<08=6ey5~s6ntxsZ^C#Y8Bc=qHb7C>`5}IJrmiJil1V^ zrbsLhYrcf9KwLYaGDRvZn8n6cyn(k+$NyOehWbDMPpcSmsTiuYcbSoOOhg*Al2x?^!X%rLuI?e8(^i+JOHMbb0)}hk zxnvpHLgN$IM{?%i&|OTE4O}PRnHJy%7AT?tph9=@_%-rWPjJn1%q<}&KTwbb*h~Sc z)1nzb^7~CJfi3J1)bb4KCDo)*jpkPr&QZJ!mE}^NLFG|RKfHz8sa?SxvU#lHF6PNg JnzYCQrJspA{TKiM literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/function/TopNFunction$CarCountAgg.class b/target/classes/com/kedacom/apitest/function/TopNFunction$CarCountAgg.class new file mode 100644 index 0000000000000000000000000000000000000000..ca694c5d88462d7a78e3b47aa7b0c3afc8f2f9be GIT binary patch literal 1815 zcmbVMT~pIQ6g}GyVnWKdh$0Gz*it0&jl$q`s*GR}Bm6b`QXL;0 zpZ!sechdl&b~=m?*_++H_uRAhp55Pne*6Tmf-McbnA4C!Q4aG8UTV;=AO}OiD`^+y zu%uu`!K#8ahMq0kwS#SjbiQ!RkSTjr!O&l^U9lh5PlSKOPaIkqs(2=Mj=68kdAyhj zPVELmZ<+gLFLZ;FWijZxt}Fbq!y64jo9h+Rs~hK{%BAHOb|4yoQ43u&uszo}@-Fsw z;>k<`XOm&j^aT$@$uz@y=@4q=!(XWJXoOC{Fr9DT?~piK7rsSBUi!!R z4#632nu`n@$=HLFGhqhFGsi2*2Y=_W}jw83Ke;uzL+Lp_M(5EAOPB6Y=;rSLd zo|~t_s5!QKE>&QV8tT;lD(p&fdmZ;BmTDtIs{ zwFN069Xa&rSjUEr*LcIwcUxLICNZVs37#^HCso|0EgfTcsACil6j0XHr0bmpPfEJU z-l`m3p8qTzgL288P#n}4hVy&LX2y3$bx6I((kHt5dklp;)5a7%BE6uiPVbINmdZ$D zKg|rXjBIx98`xL+NnwD-o@lXzLHgHQ4j96HnlV{68e74s)}HzusV{B8?>h!l;p5;B z^yH-}Mw@RUt?>>BdlAB9%PUS#{&|MTc05L1Bb$;;itT(3BDB%g?loE} z!jLr}>BJZxV`jM`F_Y{%kvmF|%U#3eVmMHVrzN?85&=Jpf!FCM^2oWl;xA<8>1!g} z&NEr`7??nwU?v7xrW42$su4&NJ>3A*7Bd1E>&!xFvAEX_U_0PY5{te(0{HkFP*EI~_hK3Ao z_Tw`Y`%%IS$1OQCtKoBe!7(RW8f5WhKg#%uW1eF{Lk?eaR5%tnzG2AB*sdMUG9(LQ z>kO%~wZ&od@ZafrQrfkiI9f}|{wwtaM+Ma8yd5xuocyLt(Dlw$ZM#Fi^@Oz=U zV?Hts$8>APYUtZ;tyJ~=8ljoi17U1Cw)@ZsLSLA5T9ZzU#}OMjYV`tR&8~|U$C3h9 z35731Is&j6+Ky5797kB8=a*!D7zH$>SjS`-w6KHDaO+g$82Ttj5h;dY#aV|cL)L23 zVz_kJ+X3cuuC7_9Q_QwBfY3uuia%?9g(Z0!na^+ey+SmF}%3giS3WfjU zu17_)>NR~!EZ9=Y235(KmcpXrEQWP_izOY)_>SXy9V=MnSkv(X=x_$Q@*|5`#~u90 zu_1T=#Bg2}xPwJ2v47_HMaNy-qg&TSY6ZtoI)#$yIFAb)_ZhCMBu=ifJ&al>PWSW} zM#mpHX-GHF&W)w#rY6EjedxJaWZ;iXrzw`VX?tODOgZ>ikcPS-ZSiZXBPlXTQXw{q z1TWemm6|jyl3N7FMWE6z44wlnyH@&8|3(s@FFz z+seU! za*8acX)Q(g20ox(0w3n)DC&=>C!;PBqU4$zpV-G6llvH$%BOa5=2h9t#oW8d$r$@% U`kRwJKE>PAYUDMC+sGsPAF8?2&j0`b literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/function/TopNFunction$TopNHotCarNum$1.class b/target/classes/com/kedacom/apitest/function/TopNFunction$TopNHotCarNum$1.class new file mode 100644 index 0000000000000000000000000000000000000000..0221c49fe7af947d8dcf823cc55514f69b97acf1 GIT binary patch literal 1590 zcmbtVTTc@~6#k|cR_eACL{zMZTBR3c!5c9}jAM~*wKV1But`VL zQjTkt+mUf4{e{1CTBJNAHe}1U#ge1bJ=}ZRGnxh+%2UsFW#D-ARiSod&BQb;6N5;a zNMY8*94M|#ZxJ02-o$x~QKj|T{70c>DZA<8Ibj%WtByr%;4Z`b34y38q*rws!Z&cA zA+_ES%Fk5x0V5h zGhpeot|+?RqBK$%B5j&hi-^!4NEC`+!3y6H`9e|z!!!?&4e$mdG>>(xa1Ns+k$u}6 zBMYj$t}jJ4+IyyWfao-h&xl9%4~0*NNB3j$DIA48nhZ*dmyh}U~u#0QMyV;gO< z6Yb|!N}UEs;2KO?jg#913Pe_a8alt*^re`Iu|FO^t@Qu^ literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/function/TopNFunction$TopNHotCarNum.class b/target/classes/com/kedacom/apitest/function/TopNFunction$TopNHotCarNum.class new file mode 100644 index 0000000000000000000000000000000000000000..2711fc3541487286781025122b3b1bb40d47cd7b GIT binary patch literal 5745 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/function/TopNFunction.class b/target/classes/com/kedacom/apitest/function/TopNFunction.class new file mode 100644 index 0000000000000000000000000000000000000000..622c9d5a6b865182ba67512ce412aa23c6093415 GIT binary patch literal 6557 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 CO8Eo; literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/sink/KafkaSinkTest$DeviceSource.class b/target/classes/com/kedacom/apitest/sink/KafkaSinkTest$DeviceSource.class new file mode 100644 index 0000000000000000000000000000000000000000..58c7edefe7530100145393e63c06ae51035d9d37 GIT binary patch literal 3034 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 A`v3p{ literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/source/KafkaSourceTest.class b/target/classes/com/kedacom/apitest/source/KafkaSourceTest.class new file mode 100644 index 0000000000000000000000000000000000000000..2025ff3392c70112535a8fbb4a31f917db59760b GIT binary patch literal 4868 zcmbtY`G3>q9ezZdNT`A&<|->?p@b4hut`dQ5MV7KPzOW0hLQ!gu{XBj2+NYO?Z4Mw z0k8}I(lG#`V-hJ9X&p@v8cYpSvYXK`t-;c8PD56Mtso0J$SE%;~L&4DW1^retba32XRTmY1uw0XP%Oer!{;?a^lZ?Sk8Pz z!!xq|sD{h3{g{R`Dz0dFR!29U)9`VL@Cg;4RPiYty?9POKCR-aPO&)Hh0o~NiO;II ztm1PDTJ~Fx1HgnddBEIF=BM!adO zsGujAa&z&lnHI7YdCN14UcBg*3Mn&wOiX3PnBPCi=|P^66PBZ3ZP%IPIWZ&Rws11> zF|S}bnL(ciQOFQ=Rh?zBX*x3sjwangh9`;Cv>BhWEhiflgcW%PR?{Z z3C)$^3udb1S*|l&U6Rb?3vQmw1gwz2jz7d1v*1}~k?XB#bH;L}+#%N~mU3o6!TpWS zPPvX_raZS$jAy0b@gtHsUkCFD1T`dR$_yA&u)7hWlqM}a5y%%m%x^S;P5 z7xVMxIoSyJ7C7BsYoCKWb)*sO4cWZ`*dwnKEbMW4_naF)?5i|EQw>Tc_2COCGcWC3 zRPlLwQ)k*Nn)F`Vdelsc++ zbtIZ^9wDt33nV{WH5#`@XM|lcm*BOFlIOb7JGi<)yhBHmPIhy4I29Dze72lEVcPX6DQrf`x@O>5647`XREHK(}&Yd*yL;Og^ zj}4SDOJ6ha5?(fN9dibLB6~l@Ed8vJFjFNbtPd z6azn#)Z4@1N}V;hAPoFm?zpGw$_d*xGs1qLkYNILyoJD4urcA#Bdl~s5K0|YNArD1 z`tvUoC_M&#iC-zWE6l}`AfgY4PINpoV-^hj8ZRqYSzSoFPR77*@LLJ}JDRY%6zG77 zraBekG(;Hqgo5E3{WGX;`wCOAE@M(BwU?WMMAx>PW!GE2C+}cfRW8PhjN!2L1Azu> zlTRIgP+-^FTBC{^##J>T_$CfQt8(^|ROJ^Fca!fS<`>Hw^)p0q)ESyKQ`x+0IUY0D z(XP`Cm2?Y9;*cnsyb+d*bUH|}3Lfvenc}MfR;iOJ*|`#GymV@Gve-T9)&v2_ppM_; zH645L2L=80oFJs$DkGstr#QP_&-n@-t0VbMPrDsq$CyxUbF}2;OCCLs0W->KO|ax5 z)6IG2Tc-UJb)4*W4yjgIJT6OMd1*DOH|tx2dzn6DI|?Uaf?8u%0bX5ci=EV>{oMhnVS@-3(+#sl;8N@07U2^IgK zHIlBIE%Cj4ghB+0tZw<-&rzJM!nS$)ER+}7S%w3A zw)m5+ILN*c5a3O?pQGh?0EbA$&B_7NwQ%mqm#{23ho*^HM2`1Fo1-mdsN+3RExJ7D z=<}UBqK2HA!-|RM$~m-hM_bP<+E46=lo1{8u30E!)xOC3$aSm+Yq&N0n%767Ys*;I zT*jT_>zkwN*&pwYzM+h}#wGhrKKuKylKpndx{BTg|;4Z7t7Zn4L}0d&<~+6$9*d zN`Ii5asU7T literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/source/ReduceTest$DeviceSource.class b/target/classes/com/kedacom/apitest/source/ReduceTest$DeviceSource.class new file mode 100644 index 0000000000000000000000000000000000000000..2143cf3a97fbf58b5697664225738f9d5b49f978 GIT binary patch literal 3028 zcmb_eTT>KA6#kl>-GOBYhyvmzYNBRAaU(&ZK+uS&Yq&%gF`A1GvjYq)GwbXuV(u4n zGxvM&(HE+chg7TtB_ydl=P7^3l%@H4c9-2%Dq5v4eK~#l^mo2<`gH$&^S3_%wBb@1 z8_`#R4d_=f5JmufDh9&{%Kq6fRP>eOsO*o)CN7&HsdhY!dJI?M1fG-4$x58U^Obl3 zFUsa66{n^6j0#;Uj;JugNWhfMXc((8R*4-LuYiS#Fq=sgQz~o~j)3ZBY}>NO1jH$U zP?u#}UbjFX(ljif^f(Dqpt{ep&4J9+i0KaLBS}hX`y4}04(qNZ=Q*L`jaz8}?SMIL z8D`wcxCT|Vm~ESGPf|~(O|G`}8O~I6(oE>G*He~froCv|SB@St6B)xCqGWTikxt?v zOcg1Cs;u1}$M(z_PvB^z&vD0SNH@mK=xEZiC!=Z4HT5YvCGAH?Gq&Mbj-Ae*lC^L! zC*E9Quv5AnwCsdALq=j`B<<;5hQI>}b6Pq+p-=14q)y{;&*d2e7jktw;Y=;9W;`ny zJ?6`}s&ZqxUnlnJ>}G$N0V z77dT!QGpsigNt%hU`0W6SWl1p$=YyxqVLaG$%N@<6Pg$Nv<43u*-UFVhZzm$@v??j z@G2vu;WfOj;SId0;w=qt;~mCK!v(yn;XS;cM^SW-G<<*$^H6+wF6%U0#76>ai|fX1 ziK60T4WHms4WHq2>FXC7zQk85zSi&!zSZy@zE?3T&{}Nd-il8N)NC*Xy6>;%2;65n zlol=4kwO6d;MEr9G0${$&tcqF79zTIZZqmkzJShJrP$bK7fi_>KoUc=ky!sOLJgL%)aXmfYKSg{q`GhLctJ{5E zIzBKa&)&KW{$X{A$zH&A&I#1z0TwS3-$OjHH{}@P zano>QoC))Y!0KWMxoF2?M`RgO4JVmo&5|~Y;-6=g8tV%@(Wa4cUDNiWLqv6)-v?TV z_x2199Eb~S$QtlDUPhJpg6X7b@^Mrm{^48h>4stxKT#VY*b9`&y2cMyfMb?9wp%&d zO}StnZoUf9to(|ypE)bTV^YQ*+@(-I!jYEML=(1i#;btGX^mFIEXw%_1O90K1!c3i zwur#Vt5EtE5o8}42(&A8N=^7OqAiP1DJrk6m`AuyQO?Yxavs|Dn#4S+uHm5tR0nY4 zf+FT_{nN658i56@5a>`El?Bua%;KmVtrYkRt2%-$jll)fm2px(kA`6C64byP6s0}1 zZ4s+aHU{fLr7G9ZIFB_~v33FL$}o59$17MLp2x#;w+>0i72ol8RB;@kOHHW8HZ;)T zO?3AV`+h``qT?5_6F;F9SMUTOw&8c|@<}?(U27=Y$u)&qTR3h-hApH4s>&EFV{Ac^qXi@u}{U*;$O7hfTm*q z4QyA@vrk+{({)tf05uiv=*2;f%IJf@;id4mQ6j@1Y7Q(D`aMM3Q55=64r3r^D~2P! X&1c9FP)l1IkVG?2-9f&hp^EifvLS$y2nJ|nvU`(EGCQ;G&PK2; zw$y5U)I#6%rS@eDwnf`+ENQi^ZLRiUU$(XW7yYfDe(a~;JF{VD!{&h>3AyLod(S=Z zbMBqI_PmkUIL|C{E#lC_aLZYPeg$(;9j;998QdQ^SKAKCZ-_R+EP`Jgnd+G(4i~(XQgyb~tI5M--HnUlo6{y~7IhMCwprWbykU-^5H%X$J9?OyY zbEyHD=`#mxt{6RT!n6;W8B5Izi-pmY<;o>se)KEHO0=M_LnIQ@>6T>n# zXj{%`EbC>YnIaD*J4Pxi<2otnc#1W5x=zSM&a+&ntGGpFs*}EB1UAjaGHH5dASAYn zXuwr*$oR(5pi=LgOiy~~u6M+GYl%bC?uZ);f*5xO-OlZl9PK)hkZEO8HiECwV~t6f zl?;w;-7kC0)Iic~6xiGpao6R%s3d~RBGE~LOF^N{r zM(fD?CTUBQ9oVvQL)(T9sgzwmv$A2|F)LIWGf$aUQ|#Z|u_f8ww!TBLTs;fRBaCiP zth+5$c{Rlfx>*&Cj$82F2%ggMG`_Cm8~CQchB*~rW4IIO_!hn`P`kr*J?6HV-Y30b zH<_)e#xu1zOYogq9IIdhtWpDXoWXY^IIrM^T0BC6XKT@~<6(R+g75420WQ|!2`)cZ zi#{ED@O%V6RPaYSevCY=3hHh3h&!NT94|!h6CIZ@!F18_Q~XTFi#V&}C58PQ69Ta- zDqYpL-#7+yPQuUr*j{4H>2Yh>R9!V^th_ymuhxnxCRRO9S&PzNyp2Idd-|1 zspD6QxV@}?Nhp@*LmqJ>F2!jd~=(-{g2 z0`aEi*&6$tuc3um>D^&wO#0onvMGV?rue(ZeZHAYPG0?|nr2hFn6!o4yU>UVxy!p^ z7T1=&DFY^*QT!3FN6~>lsTwH5N>%q2)l-_wo#kqvG`eL~5GZH-Tm+WUb6R=5yZ~%@ zAm^oX9+QzNcOWe@CR-DY@4%l0Hcn^v^j(c6@0z>Ur&mFsYE+)waZ+HUOdibKS+6Sa z?7cD>nD3kYm#YbPX|ts59doxmB={=gJw@WX6mNPv&G&#Ous_^$=@$R3`_Af!k6n5s zBK`L)p9Z_;#yXVd-R{8Uj&@LHbGCZyH541`G*3K%MeK#~RN4++3H!|y#V=tp7mpT9 zV=Esvv%|r61V1X`ypZL+In(Botdz-K%SrOSAmhoK%CzGSFRno|A^i^&K9<3uZ>?VRm0Z?^a0M@U zT4K_5>^7|Ng{JL=79x0)ap-Z~(Og>Kp|D~F9)TbBm`>7`*~Wmf^UCmsR!R=`@tdbJ z{MlCK8B;j0lUH3YzY#kl_!nPX#SAK8SgHwMA2ZXTfem((dZ?nBpXz)fbL`|SMkolY zTE-!sBQg(L3q(K-wh`9@0&K^voXyAka2u)A;a5<>zXbrdzJPf>t(AFH9B!RJW&b#; z@~Gao_7WmM9@-_IB8*4BaShry+l*CI} zy>9O9^-l}*)JCxn`^kakiKn^4$Gte(lE*lN`Iv#P3XE6$Uc|K1J&wE=AdhWPtD zwWx5-{}{*;(dgqg@kv(4i8mN){PjLRZkJhgajV|A(cij-_;TYWA74j& zrP1W$4a6r|EhXMyH2drG{gk*kftG%wbsTG7qPaonRa%y0oH&XDxPxnV^0yA!+gKaH zL9t*#bj5$s&Hw*FH^ar6r}I=c-pOoJZd^Hmb^VliGvgH_Y$I$t&SCvHHe4h@IK{8^ z^GM|d58^HyB2?I6VxlB3*kKBSiZw$aQyJEm)XWi|VK}|mtqN?~36;%JrK_KA6#kl>-GOBgL;>*L7|lh8*#-udnRRy-G53qP znfpEX=nGZJLn>B+5|UJ&^OV11%F=v2y9>KYMXU6syXW+obH4MP)2I9Io4@@DU?(nx zu?f9p*oZzI{b2;qt79OHpqifzLq~5Zj;i^X8e(b~RBFe=sKrn@PT)B;oGiyFJYS9% z@S+-C(s5de&*(6f;;;@Yj5wqkM#5Nw(Q<6VSQ%`LhdE5>nAG9ua0T>K#&K+CR6v{( z2zAd$v~D*p1uA=ONA_nXhh=Ke98OSD-RoLrV#rL{>N_XYyfHg1U>uNB zwk2b3CS_68h&ql;btlYpT5`9o*K#K#6Ebe9*-YA=OnZ^EuN;ZV#7OqPK}s764RsI` zq3TEqRAhC!UB{Etp1{$@UN<#LW2QAGBO?jhnTVvllr$$9nDP-B$vBp0yH0x1lkf0g zPTWvrutS9&w4Jz|CM!|0lJ-n5L-2vPoKnG$n^R^aVbXZaOVJ0xg;J&ycPAHjGoGD@ z9P?$|)%jz(&m{KB?9cu-1>CF12EQ0h|AP%iptd+!=acz_wH9OPyfdx>Nt9%d%2Y=e zAx}O~h@C|xk#xu1NH+6PXT1?QZVLMYfI)+Ukt1Dn3oyRM8q} zz+(m;!J`6Ieiawgsldu5(P1+^<`-<;?Zv)7V<+M=l`U!>^wS1BWYjQa;2fq6oX5)s zUcsx(l7ZLox`8+FrjEA^yp4C5Hv<>&u7UUPejY`^Su*eeKFmY$<+;i;a1kE~tSjsv zw-t+yj}3f+PYryA&sD5n82A!j>G;~fH~7}Tclch%j6iFlk$Z1KMR2o873jLZ-Xn0I zWl`L`*iV*{=qIpx={xGllQ0xmhCus~hiBR1MN$CugF0=g<^;u0CZZGIC&q?W@>!z7Me*Co|My+}Q%8^%Fq@E{LMKNZk`~544_b0DYO+|Hk z%!}>=qssT@W$-VHw$ygKAw`ORJCma9Y4z+$8HqZ)q7-`p$2})dlLuJ1Nqj5lu_x(T zV=-yDD$j&@L|{!Jgj}|x(Icvz>6V*Fuy-k&1^LgjN{tOmJkh3=Nu{LYMFxrLIG+-< z5bNn4=syq>*qAlobG(cy@deWfDS1h1jlT1ydp@Ojn2)MW5S#@{RDa`xE5J3|9mmc5 zYNK3m4mV$gXx4s3$M!Q)EC8Q2bukF-XvjI1V_u$5mt4tRprXhqDRl#eptkLF)c zGJ|Ui2%NkMt#1KA&Y}K5t5%~`g)bx0vH+c;((1A~gljbI%pA(+U~H|5&!OTPR?MR^ zfD;!qF?;KumU&bO%wwfMyH>Bwqgr4FN7ZVTz+YJ19&D)(&ZDM;AGLF+3nni?56nW- zT0>hFu;yfauqITjat-x!SbG)g=CQs6v$uY{f(_w0JT!ajkP2M$18+qI*KG`G7b?+# zI&_l4-8jU#4||ZrUUuDm_zC-Q1>J;r0KcQhC+RT%T8kZc(kJdBiQd6gi2v*%jZg7a zTZtdgil<3#9WK+$E|N&*S$t1Hg+uhj| zs#dGDSo>kMRzWHeXWkm{k6#9DG?e zk1Mz+`>!Z?LiS%(a7MwC3Z7E%w1R;so>A~M6OGV-_*mk|{S6pD@#g?2WADnRzds_Z7zbO?xEJJwR?ZRb&jy5m?=F zE;(*Y8gbijM&tcn&T>Y(eG`n_C_z`wGEFN@XHwuu(#?%hk&zlR<0H1^OvLkE&NMQ_ zkox0XW#wEaV>+IM=1lK-Gga^`*XgZH(U`il?;L^MH-k(Yo)IXCA0io`5t)ZX(cGb;}!AH}zL?6I_&HyLHN^{|;VGQ(*jCa|X^ByBm9 z?u5y}Dy>Qf%eq@bYfcW2n<*J>b+(TourV|{7lOdDe$PlvoG`L}gh%mhdOtvj$*_&> z+_f#Wtz$=LtV5uqWnM>y&0##q@aA@dc$1zMxP4yv8#Iq}?%6e*Han!|rkiLU5)e$G zD$9+|?R!$4+jmHLHAu+Amdxyx)fsx1OiGP4a90%H(QpahWpXSyzhmKIqv3n_zCir} z*Y)yV&d8oHy)iePUr~n_>T!|X59)EIhBY-J8)$e4FGlf_>|f^W59{$XyC2nKK*Ljb zC5j(w_z7O+siuq^%Tp9T)o>WEX*hz{$PH3a!|S*l#Ty#l#LuQ(-ZbtGYxp^?MDdn} zw{ew+tKk>;rG_FdYM7GLJGd&ab4GEIC50}?xK4be;H3O$jnjL~`@^NNhF{^ThHDaF zRXAEpk=Qz<;kuk`U9c}T{8|dcXEnz!ofTu4g*--vyqlvRMoo_lfz7iS63T<=EZI=0 z#0lFrM-BU)+-O0T&*}6OSf6kvnU?9MAR(G6iE2oX$e8&}6z^(yPnxX+k$!)NhTr0M zjDm`aKrJJ$!V0MgEez5|pm&A~7*2~W_X2C^nAt7@fkaE|&1&9)@06uRI$gePA8EN6 zY~>8g7p8x2mg9<5?IxR_^Xv##3a$%2G1unj&Li&o(866mw;ckJ3G>1M zrsMc5!65xHj}41)Md&7`?YkCkdq_}VC|omw1YA@M&g}>q70L1*^aT3;PbHPd4Ao5# zxO3sVt(Fy7o;SUFjhw-{XIptbw|ZI!F2hGn5m@+~Mg0b;`^a zZ25+1uGGmnUM>Q+va}^KSv$C5`-}|L-^QS?h?dThm3hp_j|K01KKc{9FU$uEhMm6= zFSb{yJMZg+#lGcI+*o!WXmZBT`xQfD}iyz%l@v1K6(`U~?b4$!Q;zR!ac)ZytCCB4+KO0x z*|(T`f9~!V8c4_E)+=waZ_cfaJkP$TO~e6Z~5Z z^86>;5Emu$TWmt6|)4XZHRTf5!*Rx?%F$ Z$xShy)6A(6M$lMkWQRr>IB@0M{{XFiut@*_ literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/source/SplitStreamTest$1.class b/target/classes/com/kedacom/apitest/source/SplitStreamTest$1.class new file mode 100644 index 0000000000000000000000000000000000000000..a5dc4412d30568c94e88b0475a3d701aaf907f02 GIT binary patch literal 2282 zcmcIlOH&g;5dJ2K2?>i}M0_AV5kiP8_&_v>AVL*YL97bJ#nZ41u&~+L+MQ5%@#3HG z=*_cLf>jH!0FN+{MiU0~U}liUUmdL~FYGqOQ^L)`EO|~R0?ksTM z*8h<*p;qmH!I*Jf;ZHg|2n78Olq^{>*ToXoGxuyI0%ZoW>RZArdycKj$``ycPwMU= z9hT=yO9a7`BPzmGDLi3FO-fgZO~vpbcfg(}*QEJMY}l5VahGNBXjnmL-F9_0ZF9Nm zTFRDgV7}S$G94+pBM-+|2opak9YCKqDkDEu!JI@DwgT*4KG!u~BM^)-f(BMrU51kpYD-=npr#&B_u7`r!wA>Vii^cYmQ z?NU3*z1_#MvhpddVNZLSCs9;J(43FdzSCK$c?xt1D z;IWDbW)`hNK@!4uQ9xd|KV424jg?=9GQm5*<~l4$UAO@(73TL^s;5zhZ0&p;745d8Z}Gk zMY*O3Pc5ChF-%;FO2+H&4N>z<$F3__WQY~aip{--OGSV9KPhGMewG%uD>{{K+Ld%j zle0Zh5pGzOcgSRgDw&Fh40rYpgyGReG|>VT!}p8I_V-0kQgv*-+^`M5W_^p-HiARu z(yMBZcj5m3wOCoMTJTA-VM@jgw@_tPh9YXN+lJ-T=@Peux9^k`JkhX(ry6?EM>lpg zmS}i}Wev}fR*=!~0xKF`;+29`d3Y_svJB&4BDWAy!w5zhX2K?a<2pls>)SERx6Syn zcVZZ7!kp8WA$j#&sMD+5v>8U???TiG*eNH0QW4%ZugZsrhbb4BP@|ARmb)}1{Na&f z7-(h{keXnQxYZClWf>_K#`#VAvq(i#Mxq(C$gDM4#o z)FgH>M?+8p!!;V79rO`%=+sX;og^dKnLGjeM4Jc(XzlWqDGbtHI+6i~aGfO8g;4^L z&f8=cAvyL1k+;*w=%6opicS(;r%+DN{gM8L5tn?#ku$FVk^FH3Hwk%+tfM5yam)9c z=wGF1x5-*YOOce(V#(=mh#f<11rMhi3&5L@(E#)g?)u>OaGzup4={;g+Nl({ha}Mb E3uXAUrT_o{ literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/source/SplitStreamTest$3.class b/target/classes/com/kedacom/apitest/source/SplitStreamTest$3.class new file mode 100644 index 0000000000000000000000000000000000000000..8eb2b0819e92827359843fe3b4f44ac9db3850bd GIT binary patch literal 2076 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/source/SplitStreamTest.class b/target/classes/com/kedacom/apitest/source/SplitStreamTest.class new file mode 100644 index 0000000000000000000000000000000000000000..4724414ccb38b8fc6e834044404c3a73127d6846 GIT binary patch literal 4215 zcmb_gTXWM!6#kUhmZK_=8X7Q^YeO3dpmL{nn$ji?IG6-*zztAZMcx<%SyClAKxuhs zXZplrADC(1``j0YAv65}{ZXBsm4Yo>PHi)BW~AM-yWhF)IY;^D-#32)IFFws9K?)- z9A^3Bs)%b6VgV&DVlIj6A_@|2U|xcVg(Pl@xFum2w(t(v1Tn&wTDIn##fy37@jnAA<( zn-VZMe*CV0*tAuqO*;#^$>wX-W#%lZ%LY+W1xr(nyQ-t}`6e;uJ<CF{$eIu%0Q z)nS>$WagTHs|Cxc5GPf8#FQ07HyfM`3G z##~Z&HhQ#Gr4aujscEnPG>~J#W{&Dv4&lpzJON#Rs9EH2%@Z)$2Z!n45Gw~TF5$*C z>xOER-&!N#nf*2z?(~7*wBTe*@YvR>r33++H&?9e6fwRM#cefecL)}Rcn9Nl=kw<_ z@rgt?k7@t1cs1K#$|8TBn~dI{5G8MVtiqgZh*YrXicR@Oeba}e?ZMC?khWF6t`Tvs z58=1ID`E33EU(fX@hv0eo@&hInZgyZO!qa&oU=MlgS*?(*=g<+8AotbgeId5CSwJZ z2`=@X634;`TE-*j0uDtYpf%(vaRt|0!2U3&w)-PuRmNi&T*4~lg3Z)JDLZ`V|1%*(ovW(~WQNW4b zRS_`KtT=(osm?S>4bKb6MI6wYFnTL60`^px*QxXf$d4cI7RJ3Xp%l5pW!_EIQ4NC` zx=Ws(8_#ba`jA>Kzil60jCT`yrDkgW?P+uXej_luNzQhaD^%#3Wg_5Ds-BNHhUXrN zfvROH9#tcq>V~pN171L!s>)>%Fkr24lZTR_-vV`#rUyKd<9Zm2swD4TqNeEui}yUa z4rXn=@g2b1HgKG%by~x=qiqHJ+<|@T!KPPl1|7>g`E%=JOctGqc(zr9knCII2pFat zSJca!?U8_`4!X5lF6y`~SvNzHM2_3!cWSNXI|Rc!#yRz}1Uy*ft=97nqK6`?=@V+q zw%;FK2kyO?r60xHTMJS>(|Z`SpBC^-SDBke(=270x3t@DIg$Av8`Lk%^cEN)r_Nc+ zje2pLxi!PfQu#eVACdew0Q$(lQF?wvGlkv)z2hg=A^hbpkI^&X6Zhg6jpbkiKE@|B z8^Sn_69^p^ULj6%;E&fBC``oa7%WX}AhxuQcpZrw8xWUL$<)wmNb7iS-k-{Er`@OUg0E8k!?otE1g!zCdcpupW+PhyMPML z(kMpACBi&Uma=L81sWv?{UCKPm*`vlB}Q1fHWT>PW+do{|5x`;o$urXD~L9 literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/state/KeyedStateApplicationTest$StatusSttFunction.class b/target/classes/com/kedacom/apitest/state/KeyedStateApplicationTest$StatusSttFunction.class new file mode 100644 index 0000000000000000000000000000000000000000..d416c34c4494a578f0e2cce7e97c361605dc1b3b GIT binary patch literal 3296 zcmbtWTT>KQ5dLOa7SWlt(|!gai9E*#VLXJ&lQ%+W-di~4B|iD4(>(NRF-p(ir# z7@${kT8&#WX8kGO?5PYa-N_AVIvmdlJ2h0bw2o?scl+bqYW;xYsloirm=X}STibA0V7(b z6sy_Ox_8c2S&1#DV^V`Y;acGtE32War6RjBtoywQKfN^2eCW80&vlg@`au+1#2PWs zuya*^WQ9F%tD*U^?pX{vU%*ns?v>mx=n&^El?A_&oiBRt<2GC)^Xj>qJxu_MWa7!y zp#C3_YuZ?daJXe)%9^!I*YYyv*|8~>VQp2qx-|E)^E**uf6g3o?8&}}9`i?H#o!{2 ztm&{Ohy8qDt3F3g}Z{&|9wc z)Qw2P(bX_rl?fU)EwXQ+sj!V^R5+CPBxm-nP|XqZBQ33KrCfz25Afb{k`IT0<7Lui zv@f>iV(U4y#!MyGIR~Rr_keKB}*wdRA^< z4UNQc5%kiLXAfr%gS-+RRVcwlh1|Tt=4IfNUXm!mkmsGkJCt24K^p-^B=MI1d8KYE z;Ek$b9bb?5q2m_MD!c1J#6q{QT?ajb5;2klN#rG?L$qOcXMoEwn>+K}Rk9}hH&6^+kRFGkt+wzdLd z4^VZfA>L4Z4>k9p$M8F97ab;xiYB({|SuWt7?! zzdGZ5bGPj`)ZRxz!$VXLrvAdg2dKVu56QvQz5?nBFl4MRV4aNX3)qlK6tGbi4Fznv zjj>b#jk5ajXBc;}xnWBITklY~P3&%ATZ;4TqF{-pqVa7CMKHf!*nxs)_+tHK*+w+D zgT$A*j~y|zb9goeK_Cu+bO?=nzJ_|Fu@N22_!ukGNi>c#^Ak9XF8;c420gfdUX0=- zzp(pxWengtr8jX7KheuAjNn&l+@Xe)r!7Ke0m-}c^eWLKS~!BE#JL{7aNjhs?4UF% zr@TAHcb!E^^*`v+alEmqv9YWI5o1nl=wcA;rSRou4H~f!+8y#)UgfEtIwx2d|F4R>U81-9b54k4bN%#tiZCg zZ~7%K?fXYdPR6%fN5Durjw~LwP0y2_KvS>fSpETl`u44-1sV>!St+nIWjXRhDL*WW z1Lm;Jk$B3@nD%M2XsLc>u)!a-C}U45;{&6Ta4rXW4wc83Xl9dyVP?0~hfP4c}Dl<)w}IRx`eB z;AwnE!*>mQ58oH)yMqMKrn17U;o0Ks`4spLOTC8V^p2@tnvU`j1(qCAcocun;- zM?+hIQVnz&_@&~$FS_v?FmB+gVp-lEU0wkTAym^?ip#rBqG~STSk2w_d9xs}E2{Gr zv#r2}YFC* ze3_GU>FX*)OR5to*U1@p1HVy=e@oa^r$X=Y+*gMpwnP|1rx9jzd`A41T;2{ZnSqq_=I$%M0|kC-0tggB#Bd$O%78Ag7|Rt$^&N$`-n)bo>s# z*Rd0S;00gHE9z`51Xp@s-%VV(fPR6e+UG{%raEtD%V}n9Tb?ZWGk5#Rf-IU$3_Yrf z`eTshqi5}g^F8a*nK{?H=JQnm^6J5k1eoOIs?+3gd)u~DqE;XURmjeq9S~=jGs=0eA_g7e1I@mTcVqrp0D}Fh%vaQ zO}j+pi)`Lw6`IcK7g$w8OfuQO^|XdR8Td1<8%Sfoz=SFSBDZfPL}B4d<4t;tIftis ziD~YYRDhBDHR1bCHo*3kUdW=!tH8I?{6& z9Of;S=DV&(!#@Nz%>i63OIS`U%!l>7Ub<9?i3UEcS>p1$m%RjA!M1VR6vQhe>hK`H zO~K$Ybdxqh2JAx*dyCME{p3=MucID~Y2k;KAY2f;I;vnr@OwL0%O#51RuN*-iWw-M0C>|o$!{l8#Gnbs1>*w6D zK#oAFS;ujlpe*iCbdyI_=5KB*^QB(5pC&iI#J+N6-CO7XrChh#t@r-Tc1uTmSsC$5 zXsO@-B9?T-TY_F=!~V5u30~%}P7(aKhCj77OS#Kqm+=DI74em2+v`u<#{QiJ`f^=*AZ2>(Hc=rlNmNz$DMjwe4@pZveH|bUJ^#R>UdRo+a(re=z zg7FokTjLu8dQlLxE7#CA7~eF7&2P}eFgSAo@g`2<6zAW?UmQ*UMVp34#A1ETTS)!~ z{d6PGWCbYa7+SUU?rrfcWwfWRVe4Q=eb+T?8|-N4ngZRrJ?J#fbUFt+n%LPXyg-#Vu3dW<1Iyl;e)5L_R#*-U36RdtW|K~}WT1Ry4#4eij7yJ!> aCCc8%@m7vMK~$L-Mh02PO3%Vs)%!nIx}+Zf literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/state/KeyedStateTest$MyKeyedState.class b/target/classes/com/kedacom/apitest/state/KeyedStateTest$MyKeyedState.class new file mode 100644 index 0000000000000000000000000000000000000000..c00fbdd595a08851ce3a01dc829fe8b6f54d89dd GIT binary patch literal 2598 zcmb_eTXWk)6#mwi$X1lLxirw0LV;c!$BCM@ximJ0;xxt7PG}rb!nKOLag^ASN0u|q zpW%&nn1O`Q8K!T{@S7Nhv$BX4OEu{X58n0ep7ZTF-=2&9{QI}x0o=ouj4{l~7{$DV zg#_+PSd z#}5it+jJ_9=5U7Tl4aLat*PldT-~l4<{m8!Rks=q%T!xJNZrutZSKlv8Il#FW@=8` zCgs9wDd$SN+P8j43Rab{&zB67ue2Lm++NqV z>a;UbvUIJ!q1lF5dz&$5$7nGq<%7rkfLA@Ql%i>JyHM9!El#KNCGtnz<5f+}RYFfLNy2SSlofpk*D?1UiRy?Xpzte8kxwZBftkVKn!6jT)u!2>Fx!1|%CEn6)qv=>SB{fxrDerNIyKH$`Dz5lU!V?8+s3^FI zaS7`RJ{R|H;HiQyu&Llne5K%Pd_#{AYDRzt1>fR3f&Gl(ia$Yn!dbxt(h@X=S-;eo z)0p%^4f?OQCce8=oTMYeaE&`_lm|wGQ`S5DIc3B`>J>Q`yyTQ-Z^#Ct+bv>lLAiHE zFHT*+kRWrtvbYmc#`;wIZiKw5qIll5f^8zx&)8mhx4dzU0x`ZXdJV%E@!2K+Bx@!2 zcy*g$JXQ2d{M%2+UBh(ThUNB?BDI%xv+B0Gi($2a3bjN8tx%=zz14dQhFc+uLF+`# zPn|VD@h&yxF>3V;5s^?dzd@@A-lR6pL`u_mg?3b$8O`zZ5!g?z$XhfHxSKa{mHsOo z0lZD10`NV&Pe4NX3CTrhzLZWMBJu*!&5_th{0IZbkRtd6i7ue*3Qp4f85eZCqv(MW z1g_%-f!`#!7|plnmm(`W7cJ0ASShD}M&cMrhF;{`NMgokuIwTE@hHvd6Gs^SJ>3zf zIp4vP8D1h@&isKy^j8d)Gb@=xD6wbsf3v(8n|dn5GRGK-;04ZYP9EZX<_H&lB!nmg zU6+XnU=~A|qc5X*;`=^%ut*l=T$`?u9Nl)}Z61@v1GO}gn8Gx9snU4@>@QLKZu?m1 zyxPo#2UMi)cx>FISbBOW%P)Zx+{RmdTt^e2RCF F{0AMIx$FP{ literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/state/KeyedStateTest.class b/target/classes/com/kedacom/apitest/state/KeyedStateTest.class new file mode 100644 index 0000000000000000000000000000000000000000..7b1ffae0092381dc68c44fe07d04905c6af4284c GIT binary patch literal 4244 zcmb_f>t7Vt8Ga5d%sP&UD-cbrK}7>1ZY3InpiNYai;K`euq5;{>>iep*_m~AmV#-M zUeo)<-tE<<_of%q%aTgde(#6&zv%za5ACndnOR`gMWOt<^V>PM_dM_YJ!k&*pL>4+ za1w9pIF1)|OyHV&y(f-I)xMbE>a>mwvKnL@GdgmZ)nMt^uE?(=t78tfqRs1Y;OdB@ z5XXpWZ>Skhy^3-8ibF6{iep|)elU&&)h@YjRB+_oiv?ol@Qsc^G%%8Q0aWtKA^T|1x zHC1aCEMFG=WKr=;uCX5HWIs9NP0JBz>wGDF-JCa*w&~=OW4>oOx&A-`)5{Ta_d3fI zQabYj&!t^2M?Pj|Rwid`%b6oHPnvmRDE3KGS)S|UrQ<7Tt_&{7Ov$%gXK-yv2{U7b z%GHP>u-$SBB|qFQFt8ENtm&Jf6v>P1hWp0cl9!QWq^so>tf#hwMU=K`CoC3L95K2j z#8A3{T0fj4uNSriIZzb}1^2p}yeQ|bj7&K*Zok6S2NyE3pj=VZ@M$`_BP)xNVP#u4 zW!lV7XUz_Q)148iEN9-GlgY6as%%Ks-xZ-5nZ7PFD!v-+07KwVWc5J^0y~%%nYm%J z5QH?-S)esU=um;$A*Fe$?{r_s34s$)ndr+PVjrq61B}s0$i^8<+F6FR9@_j;5O%w( zljFDwLIWqztKl;SK8w#8_&mNK@buuBse)%_eA;m;i1!|qVN*pfGo^%_@?~w-gS~QC5L8VEG6l}OO=6vpQ(-Yd9z^P=c;=o>bgp(tP?#3 zexay4H>;I_Un=^8Yj#T6w#=FKvtF*Gs?Tby3+zuh^NjIqdl+5qYf*111(e_45D>=< z{0hGocq}TzeR(9XE5gz7WlnkqeuLKqn${N5u9GwHTijL9Z&rCTv;cE&jXEOfV2!~U zJO6Wa6?h~kX@J_gE0F5!+Nip0x`a0sr9WzVCJk>}#k{~!XX^ilZcy>;xLokVj2(@} z(P|0Uz+MkK8Fc&(zt_=&KQNirv&u%X&Wd+t>-+^??yU91hCDa4Z$#xWmPuQVl>F7h zbfh3X(|0|JesU|K3pC8h#q)~->2)s=wF*_oZ$!9C0anpXX-;ikn#e|hi<{r~U~5pT z0*@4*SB>@J;DIV!T)kKjdyZOYGRQfeI=$-wMVve2POs+Y^Rig7)%kf~ttLF+)MWW# zW~cH6J3LOV@<-Ay~ilIP8s85!JS1=`nNjY@a;VI*T#&N2OxM=gwsW)wpbeLi8@B{JV;vt(ELG}e&7o^@bSsiCe34SzIH#-9v~V6^H4 zsyHpYB2jLWhGMcYTbfMUk4$J-rZ>{AJ69?QycXqD!3ed!Y&uz67CS=9{#qwTW~w%h z^M2YN)p^CqwHq$5e2?+7pXlqmNW-^WV|H2YBW!)TO&)Wz=6w#D=?% zmC`m7VS)IZ!GpU;*<4>ZDVEV%h*1-1fz@{Wi(yuE@S64#kW4-dxZEvGlkp* z9WB^_R_w+e?C0|&9>*CR#Jg}Pkn3c~n{)l#6T<+Xvy^oQDbJCrjyrqs44x(Se(pPu z3#7V8+P2lT!PT`(Tzf9S5xCr}BZVPiDJ}m&8g(VSb+nA;blq8syz32)_wg^>`r<#? z?&?k?%GiCIm&ddF)FOZH=U0mppuy`%(|0s+sEm&EG7e96*Y_^t$Ygh{cL`6F(HRUHRtH^^-HjYjuPtS6ln?f Y@D}#sCC)dKc8b1!FWyI+egNiw0q}0;Q~&?~ literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/state/OpetateStateTest$CountMapper.class b/target/classes/com/kedacom/apitest/state/OpetateStateTest$CountMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..d7048e3d8fcffeec986bdaf4921f7590539d7689 GIT binary patch literal 2177 zcmb7GTUQ%Z6#h;Um|P|;rGWOPt)(>t=rpa?+8|oeVuMN0f~Y(>3SoNp) z;;XN^me$q>S07#e1b>RlrG95JkPy-?e8{=%v(L9L-`;2P$3MUR2H+j6XOYL9EHZd6 z108qO>isP4p`61UKFDDnAFAOa4fi!HWT{ip@KD2|hL1Ho5*V_)wi^nZt?ioors0_G zwo!FMxh?&&!0?>y+TpxFvM{wKkg9l_Qs8vWc4ed8+>rjNx#3VUTJtQ^Su=fG?PFmo z+_3|JTt!)^o2{1g1@x-xO26WmK_Gc}w`O@wV^40HYBpPTD1*=lLNk=ca!aatMGdPI zPxb)Ow`9|73EV0iL1=lqp7B8L+m@`lTV8o;U|8ABLk)pTuLKatK73-yR%m-}prI;| z4_vbq?08}1n7~+JX(=|-4sFM%*+EG6gu~yGK*A{rWLE5L*9_Y}b2T+Ue{O)A^90d- z#_jo?9FU|!N3Ux~v66J#O>*PVuE0pYhQP#8a=vLD5Ol3i_hnw>8L72L1|woMFseeo zCxh=Q_pZmPQE4r2>`E&owk$LCnn@ddsVICHE;1updV zPha)xxPXfqz7n|8t99}&V>xwAb|?`j{clbL?j5^x;uN#$yFMJYBA=W{8g)W7l)lL} z5zzKcr!AMaSoDSJ;NDM@$2FxDJ!7|l@9iCd;>p>>6+ZcSByb9+ z!N*9I8owMvT(kT*j&WC}TyV}8e}O0_pCR!xl0Qw7BCfC z`Hr&+r8NBXxEMXcmbYqs%PL`GA1|i4N#({>4zKd6$%^I^YM1HSjtz{{heJ9k~Di literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/state/OpetateStateTest$MyCountMapper.class b/target/classes/com/kedacom/apitest/state/OpetateStateTest$MyCountMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..10ad1ed377a8a6f145dfd1da035ce755767b13e4 GIT binary patch literal 2451 zcmb_eT~pge6g}$?goS8`3G^eOP1}?hlOU1+O|hX(O-P*@NHC$L?TZj=BVtP$dBvoC z?qBJ9JJUjGW;%K9kLvWUP_T@Q3p07Jc6GJ)>^*1iz3YGe{p)W4Gx$NpFz%|z;+}$; ze#|PEQ<27}Dw4QAfX^_Wp^t?D6tN&bEXvvE3cgS=ga;}H@uh;21XxnAtl$xYYC66x zs=^SQVXESIb=`0cbC>J2hGjpe7fUytX4A3tmRzK78V#QZ>kAB-s#UiQ;d|saN(i__=%3K7zu^BqHuL{RXS2-&T< zT(S)KZIJm!2NcDZa$IgR+{wk+nvPww>b_?Pi_|Jb-wKk8>KdNWH-h`IGm< z7bbTlbW6ckq)*du86M?2$hgj)qc8D&%j9Ld<`gF4QOW}iq!+&1;QEGq-X&t{&WRht zSWi@jbdWU+tju7)nGm80Q5BwL*9&K)$apUDVQqVln}Ue8(P{u9hMUMK_@3c@bk#*_lVP@NO#gS<48v_9PHK$gsdKSTO~h() zDrLc62nsHDMnT0l>F}g8Rsz-6Y7C>fax`0CH$RCUN#b}31pO;o6R%UBTFcBisdq%h z&`%tLR>!d0rJ?oc{q3|mtH*?rwBnb>tzN;NUQfLy%-1U%okqDPoj(NoEm(4uo_&E)$2FR3#|toq>-5G5`Xd68&d;FG3>eGj50H3? zxpI>6=j gmT?_3;Wll^WOy_>rU@j0JNSS`l>*4(A>K#kKmKE>O#lD@ literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/state/OpetateStateTest.class b/target/classes/com/kedacom/apitest/state/OpetateStateTest.class new file mode 100644 index 0000000000000000000000000000000000000000..afdce7f9e1926c9878b9206656d6761356419e44 GIT binary patch literal 4899 zcmb_g`*##q9sgXC%`D3R>4xw&4RnE!5LQwi4FPNkq1_N3HYqeEYA3rln<29^%j|4S z`mlRZG=wDroEbQQv=q=lFyFK#!+KkDoiUNhZlA5KeQ>&i&qdzxVro z+?&_`cl}iWyYY`0+VJie-h)Tg$B1H3jp;adM`Ey$i$fqE!+E$G3NgeKwuf8{MT{!c z_r@@W@faS%<54`J#wVkASS`L!eV&Tq{fftvYVv_7E~xQ?QCw8xhoZQo#t%nvIf{=& z@pKf=MA5I|qfvY;h6J9C;^T_ua~dvb_(TlNcvgKrso_&Gw5mxfJ{`k$d`81F8a^wq ztkWsl-f<(Jm#%=GvTf;hT1KHD3mQHru>AP=42+rsrfqtM1ge_0pBAX@bTU$4Wshmg z6UE%1bo-1!i!1RSCv8}#4cAoj@?y0&Y!(D|^rW3!azthfH5z%-lLaqX@C;8TPv)f> zd)23p%N^vAGfZ1xb<^3NbH=EVvndzhOlgk_+~4E4S#mPc z!!kK!nf3_Txzfmyh7ur2EYo%DoU}bfnmb)%GF|jc$L^ZmQo;Y1(`&riDd)FL>{*7(3&-yR~bhi;4Hff)gocg{Jmj5 z^2en&>|_cnYw)#NT;%ZeTJ%@3Mn}{KI-bTiG<;Ky-&z^Lw`=jdjtlsXhVSb59$paG zd+P-%5h{-wzOUg2I(~>3bzH+s8h)hX$GA+B>-Y&?7SOWNJ7MIcjuIwxyn>f?{1lf3 zl5+}_DocKm87kT|3S%jGOpfY|>@37NBQMY#=DBd?7uY;qV^fwTvxaq_ zn=PsuJ(XVq4Jmt+d6j7lBD!%p(+p)a6=|;uh#fj!!!HEx2+<5OR>v=uXI4ya^f-1_ z$FJ~fb@(@otm&=5s0`Ly*CR2jgVs$`3#k#}5tvz^YmSu}-HYy70&5r}mAaWgitc?& zn6M_TC`j*=;Tm+5WfpP*-A$>tj=E08GktQ*3#!VgaG;mN@}|rd>bEic7Qc&O7k)3W zr;=4vHZBz4w7~wGm~sLB0*^P%^~6niE=J|~yI6<15dOih{o$ydRS{-%qNz%7_k6bU zgM7Lagen&;wflA~B@h{rnz)JTO~rFNb7b6r;5dcvQV_tg=5on&6?+$!OF@q zlgj0-p!=#O$Lr^?Q5X)M2z)Q3*stXIqG9opP#@0V$yW8qY%0f0JHtjr%9D-6u+&A% z9Wv6=f2IgDR^APZv1K8YUNdVOUeTqvdRc`s<<;eBKq`bcL-@(^!`D!xkhe@aYg<^k z$^DAYlPH~g+OUdbzSLsdDZ?~Yx4_y8WKyZ_?WZ;TQOE1}i;joUuj2{Tszc4P?4sZX zN#PAzi&q9_&I-fwLJJ!HMwj$B&Pb8H`BIo&nMR=c1BRWkWFZk?c7!gSW#vLEGY~6 zo`86Xz!L1|x5i(rM+ad&K)?YU0XB24ejaSXP3*Ke8@T!tygMC9F83_*VIRcVZdgH576!|7WlP z%dru4xDyT7iY?eiahv$>hi2mLpcJjXe1`%Va4+uT*=ovp7@d@PIqt?0bWzqiVjji) z0FX__)qMg|4F8xMx ziEsZU2dPf&3!E!cFM0FAKb2|MIaP&!aopAtzoUfs71UK7d>$)W;&uKkQhjivI)WGZ zTcQB|t>;gj&5-V@=v6$&u|B@Kgf&-ik?`91Iv*Y*ygt6chb_Vz<8SlfM+rB?@ATn5 z-}=|MvZ}V`D!K^N#~b~vcEW4pn|!#H@Fb~Cgg3@F`|I_D8{&8Q@KWEY*KQ!uAKx;8 zt*=qUz;SZ}<_+}WA?}~%FOHi3BB9}oSRPydCQ|=FH_gbLEeFzhhLuviy*a+Egr=Sw z*xuh#)pi5T{VmmP6QEgl_>;)gq_w}LhLfEoBq#9pYdjo8Zp_U# zz|}UKWt@mcjJ#cpou$~raWBU|;jj2J)*-|F2GWy^haqG!3=`+d JGaHVY{U5lVz$5?w literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/tableapi/TableTest1$1.class b/target/classes/com/kedacom/apitest/tableapi/TableTest1$1.class new file mode 100644 index 0000000000000000000000000000000000000000..1b824d162b6bfb801b1eeaabf67be344038df4ae GIT binary patch literal 1144 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 F;eV}{kPH9- literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/tableapi/udf/UdfAggregateFunctionTest$AverageCarNum.class b/target/classes/com/kedacom/apitest/tableapi/udf/UdfAggregateFunctionTest$AverageCarNum.class new file mode 100644 index 0000000000000000000000000000000000000000..e60ca431dda13830d89d934f2886aa28d9f3483f GIT binary patch literal 2324 zcmb_d>2A|N5dJntLtGP5j&k2u+ENVVY*R`@OG_Z4LX;x-#n#yvLuyx!U5O{)5#TXE zf`ULo{mnxmW)e3}NdOCxAKu-W*>Ao%cJlqlmu~K3vyGGp-?r3H}r_xRJq>K;NY8*gkENg`p*Z)QnqI0y`?UqwWVQ%gS4n z%XO0MthlDEFG&jTnv$(Be4)c`DctNoB9d=pPu^$I? z9LI?a?h4HRrx_(M*2UznMG;8UF7S+vLTnegzuKHw;n1TgJ$il5?IN9@#*49r~|fcNQ(%az_BiF%kkq6<^2pKV43TT$5oH&S8}NCU72m NY1IfWhe-?~`x6MlSFHd5 literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/tableapi/udf/UdfAggregateFunctionTest.class b/target/classes/com/kedacom/apitest/tableapi/udf/UdfAggregateFunctionTest.class new file mode 100644 index 0000000000000000000000000000000000000000..e30272d8c18fa5c8a025dabc8fec2a687a0786f5 GIT binary patch literal 5857 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 P&yXD)m;aA>PEh>|s*JEX literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/tableapi/udf/UdfScalarFunctionTest.class b/target/classes/com/kedacom/apitest/tableapi/udf/UdfScalarFunctionTest.class new file mode 100644 index 0000000000000000000000000000000000000000..a979ec1145168912493e9100ef2aafcbeb7e0e6b GIT binary patch literal 5488 zcmb_g`Fj*+9sdkDX0i+rmNOJFKxmUDu!V9aK+6%zrpr+hf@$M1*?qGaGCQ-(%!bfb zt5s{Y+KNXlRcpPEdQguI0d2jHYFqF7KC1o+{-BSacV;))beAMgGkt2K1X^=mZT zGas+T>onXe*RR*`206Y_#eH&olZN{vcr)Ij;Q@*Etr5Hp4@U41-mYOlj^`!h9rE!` z4eyf71dw-Ycvu48qu~)bUeNHU9N()Usp5Sa-XB3L9@FpviR5t=A5`(72sYy}`S`Gk zk3=XO7hCbs2yVc~R6MHU;|jFHhBtJ;NeKmd+_r^#z%o2fcnWHFo3`oiRZ!L3(yO34 zJhUib+Tv&~Ga%d^W5D9IXu?SvR`Ww`Ol(-B3^^KE(-)o}^W{M< zV!6~{>||=NoA(X(P|i;JrepW;NC)X<4AWMyy!npAX=B8QS%#gCb^ESqr#k|E3^z>* zODb%WWnqsfxFzAZX;L+kLn1b4nf7qZ^Ic(Nh(j_H<0;d1?2NE|iJCi|qavA;Ty#!u zNoEGkP}DM36wEj6Y|am_E7&~~&6MFAAs4ZOoQC(hot&E#BovX`MO@qGgo{|TK*JP4 z!A<2jg3Unw0oP2WMJy01BpR4+s_b==r2wvA-E`Q3Gm`qygiGz4qy3wTUP*NGUE$>{ zzraDAcg8vq0O%W2J?~t$=zYh_*$h=)H2gG1*j?^!d&$MgIicJ=MgFXF+KC+$BW6;> z?LntQ;*E5UCPh|yoTuUw^yj9O@C0MYGVc@#BQuaPniTA4F5$|wN1S01>n@&3g~vKt zO3oY`I4zPgjB2d_hl2GbyH~@YU_rNUB!`a}*+AVYKB-_?h@nZwW0MfZwp}}RHEmX~ zxs)e*PY{^X%F8%n5He-d4w}MBF?u7R;~xs5YgNTmut|ESj@{U!;!`@Fz^8S52A^ea z>1^-Mx(0JbQuGJWy-{YDe$P$zOJ4iwH$hl={i#6bCUw5aAN6&74i^>F?{^%ZZee7P z2!F^)d5dcCWIZ0?@cDWqtC;X>ndUshnP0>Xn5ks1O)BekMO`dm6?Kp8fc$8eFb+lms?^+nltLRMC5Lk2umEx`4j!pv8-?n z-*L(Mo-)>b*(T1iPhs9k(mpBZW-@s5jMIO_ znVeys3EZspPDFSn`b*j8u%F>4Ej&z%8n{A&< z*7bro1y_JuiL)4LR` ztbisS?`r8)@h2UB#@}=dAUUOXDOf6eiy+?y6~&w^gTt`=5`c=o(;5lK8O~)D+*eAe zfFqRpuwkbx;WdRPDCa&;%kM7P^P?Jkm&YDH_i`2EsBo;gehkW!oXo>beAWg)9XE5XhX=3^`?;#a0UYEh zURH)tg$Q8}UBbLXYjqw~r=rzITHErdIlA#OksuGXy}I=hwDy{Ynuh9V-8dpuXs^A3 z`F+|L^metOCc21$QP258%Djk-MzH`(_`e)$uo_K#Zl+#3upWoFx(&_f zM+?&Y+%$?de#_c~2l+wiW?~o&#Y87hN)0}MTX2|aS%7;HM;Fzx1b5?BBuIA+&fo}+ z@>COsaSX>%LprY@{u9(l2YUF1&;yn0y*NpjMvBeo<*W{;h<*74wwFy{>m#2wldxCH zeg5R%Qr>-OeeL7u-242M07 Bg$n=x literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/tableapi/udf/UdfTableFunctionTest$SplitName.class b/target/classes/com/kedacom/apitest/tableapi/udf/UdfTableFunctionTest$SplitName.class new file mode 100644 index 0000000000000000000000000000000000000000..36d419027315fba9e0711b0f0cf1b91af2e3bedc GIT binary patch literal 1353 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/window/SocketWindowTest$1.class b/target/classes/com/kedacom/apitest/window/SocketWindowTest$1.class new file mode 100644 index 0000000000000000000000000000000000000000..d813a371b61f2c94b5ee3f1c138455001c757733 GIT binary patch literal 1395 zcmb7ETTc@~6#j-@wp~{)MG(acDnd&OOAB5QM3GBUQuLvuhWNB>r)6L}+ibUB;-Au& zl1O5F_D31dZdY2M(eThcbIzReedjj)_51q|0E^gAF@RJIGb%Ks6=W35s)%6D`{)Yh zRm40chOCM(atany^kY%MGX>8TykLl~2r1lEhEOt9VhFF>WzH~A5R$)d*7muxYwTNO zNfd0;uu6s_JUuXm-2>5J(DG7pXWcRy4Nj_FFzuRt#LI>!jk<7o!_`lOEZZk~(Ke5` z`_Wf+$v&A~ChnS1XUHZChsLp?TZXLaMb{Csx}3UzRksgqeS;qhljmi{rbtG7iK}5$ zS4D8EOt-_IdR?oVpG{tOg)JKjUNTH|bAQ-B!^xyXlyGOL&tRx!lq@ zFKwFPrZg?PL0#P8?txuau%zJ?mNg6^L7mHJSix(C@$P9|>M+Alrw4iI@+x<{_*D&W z@Rp&!b6c=wRl^$IdH3rKgPp5(SsL!(F2ig$-G7(k0#17fv?$kZGOa-;o%7K%q_2?- zJ&u|oB*SR3$4YsRC(@`}!eyB5UZ%f`+#`l&*UOWTVnVtl!)nra>0Rb&?JR0<$Fj{Z z)+02Z-%gbbdro@Wabp?8y)&^i@s6cIEN8BYi$RNVvIEA z&5XRf;4g^#a7*b#Ukjm~Glcgtq1+iFdzoe2OWbW*SM{rjts9{Um|dAN_h)2mk;8 literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/window/SocketWindowTest$2.class b/target/classes/com/kedacom/apitest/window/SocketWindowTest$2.class new file mode 100644 index 0000000000000000000000000000000000000000..348aa97e9bc89bf96ba1d8b450591ce6b6fa5742 GIT binary patch literal 3361 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/window/WatermarkTest$CarCountAgg.class b/target/classes/com/kedacom/apitest/window/WatermarkTest$CarCountAgg.class new file mode 100644 index 0000000000000000000000000000000000000000..f378db6ed487b3168e63de9ae523e0036ca80b59 GIT binary patch literal 1813 zcmbVMT~E|N6g{&atSw!>MHEp$#DzsF9|8)&kTpbbBZ&}v9=fxo&}~V#g`Z%eFTVKV zuh5s(_+WhYM;Y&Q>(X5}8{$LfcJADJ?wLDh=GX7Lz>I#41KM@42miI*P9Bu!*rX}wt+)U-EZV8`ZBb{m~`OVk!z#l3B>AzGH9J| zk}%YLH}DLxZG{4E(%QUKk%laKG^}Dx!xKDZ=xNrLhH*@2xP!Y4qj43th)cr=ZfY3D zjSQ&lay;~^f+rAd_+dtOMzKk~hcYI-`MV6ctFp!f zJt5toi%zeOLYA6HV=v8gvW#qc_AA&I`bnUV#;(x$7X9?E)dMhq>ojAsX*AZ86ZJLa z8xo&elHa#YrnX1PFX+KbQjR)TLsI2!5I%$mI&I} zWRh>?^D#sluCF%G5+R1{0SPCO^<*H!lK&dk$fRXkrGIbW$I)PlW m7{>jG#ied)P&y^2quwMjEsq5ckPGb$hRCV}r(y|%Q2qd-Z;0an literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/window/WatermarkTest$DeviceSource.class b/target/classes/com/kedacom/apitest/window/WatermarkTest$DeviceSource.class new file mode 100644 index 0000000000000000000000000000000000000000..dfb90a0e996aedba88b8a5b48118d191d10e2705 GIT binary patch literal 3054 zcmb_eSyL2O6#g#LGYvx{iUOi0YNBR9aIz>W5HupjF(ash7|o*1Oal!w-D6J=X!gbI zd(5VfdEvpQY$%~Bm82?3Renh-4@qUIN;F3E-JThk5i44yFLycj+;hM4opaBBhp39)ApD5R$sQGZgD6L|9Q$M+lTDv&_6Jdi{z@FcgR(hT zi9>j(5)b1M**vP^uoNFrp-aU974aYvFk~|r#9|CpVjYGnU}7Z5W>iH=g{8t4P@Sx0 znbweiI3y70FfG&V6!3)_`vsIPJ7EY^M@`G<$)*Mjr%xY9Qc@GO<9f1RcT73Y3l(?R z%m`@PjWIKB#O$mSr>YjQEW_za>Y0qe)s4}(oeGZ{30?Mj+H{SK8y+{UggqWUpu2{X z(w)&h3Re}|X(uEiRgo5`%9-x6E!Q~a3hWIEQs^xRKC#xar-At@PGceBLqOBiF)_Yr+e4<~gRkGT%d zAh>{|(}UE^YSuNA;eDQrt135UcI(7mo!jg!Q^2*V9HbdW0(GUaI-V}XtF;tM z$6UXPBoUH5WH{}egq*sm5IagTB5jY@;aub+)}Za3R~2*h_$cY}5{*|!#ZeUw(_SFh zeJpOIz2K@~j4ER0ki~F0Ouh8YO^j;+m3b40>sH)I3LGusu6JO>h`a4K$lA4zCl~p& zHoYraa+%i2oYk-jt2Nw)+Xd!(NnDhs0t;qEJN3*k`PSefD^P!B!f(r($%NtL5}SAZ zu!b>=%jTGd<9JNN<9LEW((ojn((p8%QSq#X=kPqkrr`u$(C{K&DxfI3N*Z3qD+MT? zJfCHC9t8`$aR;X z612IH3UuCB^#ESs=GF$ws1C{Gq;Dav{+5aHp_k}(kSbm zo=zK9LZBs7l+5{(*EmO%PYTwDW!(Qi%jK?}Ga|4kG*?m9%P~EfHF^hGyh=?Kst{{& zI!mORijftr*{pYYN%0wZ5xpBVj>inzSWv*=T?UF|QJ$sE(<$dOl_#&RM7=<&1U;;0 zdb|gTk0;+!Me=#2i!;ajhUD36u7dxnXvS8vbun85O!0gvOWs1lz)lQaxIkxIxrJaoO66f60mS^>dc zpiEXbeztrZv)Hj+!`UXv1^ZyrS%@a(3zU7rSsCt-GWNhvQ1CNC9BDaCG@_X^CO__^ zHCho9{E4ZQec$vs%1+^%Y4{GFg|d4Ze)fSLU#n89s2^i(2amMP2^n8E^qHl;zCLXE&F?3JU10$*cM zo4=*OKZV*dPU!L&GGNoW;^9EGxsrMyU8o!|)zmv~D(1bs+hvRz<&{%iftFstfFhHIFH8jRM}2dgPQ2nwR0Ra;O3iXu}6he2gviax;L^O7#@mUPoewxI9+jt@SF zGd?&z`z3yb&CS_!@41`rKfinhFpotW{U|uFamPUpch8ZRM&Az$ z_Z)gvv{14zWnr2jr|U8<%vyNBaB=h9wrq-(IF>afA_jL|(YzY)I2JL(V#N=e-oB`E zGxL_zBG%raRMqg%d&9MenmpRyCTF1=sZ9GUNhS3%!%{IdN@<57yBbyn!$3tU@v7b2 z711`|4ahTC34I>y@JJfF8^YJeX!aIq!gV{MR2yew zDq&P3MYvxV-d-TpzLCcxnVO;U#DP#+6MOF@h2I)4{gKx)W$$c-?Z_7|Wm4oWm1hi9 z(&B~kgD{q=wkdQyth$)NoQv}qaFNGD7mqN{Fm}3kdJ5oT1XroQPKW$MdllwLq~5YI zETpW7g~#-9N-hi|ekABDoGG=11qN$1RGRvU;e9c!W?Su6E07{8bg;^$v`8dxU(uW@ zt0t26PHbw!;@@U(;VHvf%0l-h!tm@rkuX8OHyhNoVEMdhLG$0EJC94`9i-JVGIRmX z)buB?sn5uKBrAi<^vqEVATUJF;o~S=p_Lgm`M g!z6CeoP~?qxJau};^5*wE>L;;$u`5o6U^r9UlN46n*aa+ literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/window/WatermarkTest$MyTimeAssigner.class b/target/classes/com/kedacom/apitest/window/WatermarkTest$MyTimeAssigner.class new file mode 100644 index 0000000000000000000000000000000000000000..f3a879be7627a39560735ed772831c4b26d79fb9 GIT binary patch literal 1385 zcmd6n&2AGh5Xb*c(kuy~g#s;<&q9z=4p>M?2qhGuAW)md09VV%;aY$j0d5A^ zWmtdtzN=#SG)>h&OUqDcX_C!Iq^V39iVdZe+h@qv_6`^dP1BbQ8*QcKt8v_uwkvuO zSvK1y6w!gO%Ih;@!5t}LJZgs~<|Ek`UW!CHnL2)~bl)8FH^NC93p?tPvAUQ|onbq) zl01BlsS|NBPc*7>a^vDO|6ficL%Zb#^5rdxqb;d~& zDQT-SR()?-5@j2N^MqQRp&MZ4PMRJGi1zbl!{yvC*&QW5U#nLYo!KJ_e literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/window/WatermarkTest$MyTimestampAndWatermarks$1.class b/target/classes/com/kedacom/apitest/window/WatermarkTest$MyTimestampAndWatermarks$1.class new file mode 100644 index 0000000000000000000000000000000000000000..a748f017c696585b1d3c8b52d04d6294f565251d GIT binary patch literal 2414 zcmb_eZF3V<6n<`+bSKMF0!9KwplXCPQI;xil3J-Dg~o)Ut-RT(;;(Q#cN;b-4vuNrndI(0d+u}2bKZ9U{QLLk050I$G~U8R8(CaR zk$|qV86&!E;Y#XpBmj)yQyYhIwXZYwmyI%JEqrEU0&@rOIj&ilw@L2{3l$63EmRp& zP2uxL46MfBwE4po*%sZ9w>u2u;hOB`&s(^`aIEntelo9`cX=p+HV-zsbZSv45mbEM z?F!mf>Yi@98=}e0$~!V7Jai&)AXNZoaRdrLSkm25LJ{`TT-Rojg zdSX#M(B)cP2Q7*k_tu2_z?W*ngwUl>wzYDF!3ZfsgFr6z!cH$N8-{i>#$hx0R|RiqdZ5Mx0iJ<@Wg_QN^MvDpEDFG3svR$x+_(y zA;LA?bZ`@2IyjD#4o;!&;3#qw-$6X;TD2S;L(V}1w=660P1P&}lv{(0oGj**soosKU>kne+)r}tcUR9IsL(WPrM*0_0N#I@jpCD);pf`Gm40?Evc1L$0@ILaiBe2L6O>xtgeM8^FB2z%NNT})3 z6WCcCkiX&JE_6FW`hjTt7$FxUce62a7H3f)M8d%|(K4=QQACOK7(T>DeQQf(%{==AZ6n+|_l8X)IB5;y2>IM#6S`45b~drLBdc*OR2?H`bx`J z{irEzLo`FOEcqr7;jXYM(MQId+gF59^8*v{u55`!idZ>{%ny`qnFBtF-5_K6I9^ra z99T&_C;rbQ@f6Nj54RY+n$b?aa}4h*zOiizBZ7U&_d=z+NlZ?$Bcr(-NbMY5{#WD) zQoSF?p^~;d0;{gi3`K;!U`*-7%rJj2Vkp#ATMO5>l=Tn)#a%a!)HgOA!=K853gnL7 zGu2H>MaS=mf#9LgZT`C1k%6mDo07VtV$1g7--8wFrf&netq*i$Nk($v-e<5+>F*M)`P8U!iuR?U15RU+G^!5H5lC|Q zF|xD+3SW_VO90uAq-5y87{I0g%R{FT0J-BlE)dXi>V1(whPxG9N-e86L2{MsIb4HB P{z;JJJByoG$`^hDFWk^| literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/window/WatermarkTest$ResultWindow.class b/target/classes/com/kedacom/apitest/window/WatermarkTest$ResultWindow.class new file mode 100644 index 0000000000000000000000000000000000000000..9a3dcef3f0cbf0665dca47a6501879bf4fb21b92 GIT binary patch literal 2538 zcmcguTT>%N6#hE5Cd0@EmPMnx?!^_ub-b-;!lG;h4aP+Q!Sy~2O?F^1lbTHS^6Y~@ z!w0qW)faZrDvM{IEq{*X>6uB=0cxQN%a`fv`ObGvpZDG+Zz_;C6sp|PP0yC|wCVj;Cauj)L8f$i4L=;O3 zT!sA0h>ihl1-4_9J;xDN;Q1w)9!BvDDb_I=1}*5IGu%8AIfgz;QAmnmSaH^&%8<3% zv>2`)^>&Ck9jj~B=@7F~E*9J^hMa<2^(dp1Z_8`B0mFG^sp1BrCVW~Q>8*f=jdm4` zs@r4cv&vkEK1T@iCo!GvDV2t|;~8bsr#dW4VkL>8Ej+M9Bd|TU$x)?{R_&T=1}&e$ z+y5Wx$o<$CTtrHGbCm{!2NwQ~EXFHGQugFi zRw(=zcRehcRj=h+V$lwjtVeUErLyQak6|4j;yIKW4Nda+~KN~*q?KJq2o(@Mc1y26h+5SI)jwyxQI&}Uo+fLNt{|`dk94* zPWSW#LMIikcPS-ZSiZXBPlXT zQXw`91uxtpm6|jyl3R6jm4p73Yx%N{1DdW>*|X z)$1FVZRK!4@}6HllG|RfrliE$&Tv5mjfqN(!fB5hSLwAM1m%N%9g@^inbY?IjSOlT zwdwIkV82o)ff4#%cB?6Jgf78A`YKs%a^yD5AkC7~9ruLB{ z4Mv*b0GU1T$LK5aeCl^(@8r{Yz6ULzd4&Fb=m|)V$85;J9FpmIp^NFGrRxy>o))oG24qC+)BW}?F3@T7`T%l z%UuIw2C@dm8G6)~6J(|g*;rYWs>uD7W}U%Y@;u=eT^zkZ zB66Bxw)n%p2`c#3h9-dy6_D= zV(43KO^VV};+0uhIeG_Li_VUB|0gf${~fQ*!jVu{N8YtsLnE)+_N|R9^ei z7D2Gkwq`mJ3*Bh#Xk3@-K>7uJG@@DE_f>@|OU2!TBTQy0itI@vH88`_&36X%3{TIL z42;r+Wq{!vSSqEk;0Fe%A8L8w zA_i$j{vjG84=TGhmLeaGp3d(fIzjCt;*s5h$p^%vyRltbkA~<&h|_o<=kb$t{lXRe z#xVYbY@;ol|7>Yorgg0*jjJ?@kSFL;jwH?0b5d}vtzeek(+ZNg{CC7AsO=%HDZ2wQ rL%3v{B1XX4>pDil=M74oCP?5WOd1UnYyvqFtG^1Z-#z+BOvczhXnd}> literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/window/WatermarkTest$TopNHotCarNum.class b/target/classes/com/kedacom/apitest/window/WatermarkTest$TopNHotCarNum.class new file mode 100644 index 0000000000000000000000000000000000000000..54026c3d398e19e9810903ff6b28ba78b3b7fad0 GIT binary patch literal 5856 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/window/WindowTest1$1.class b/target/classes/com/kedacom/apitest/window/WindowTest1$1.class new file mode 100644 index 0000000000000000000000000000000000000000..70b16979dfd56ca038419f0319202d42edcbd42a GIT binary patch literal 1834 zcmbVMZBG+H5Pr5Vl$OH+@}dHQigOT2B?4}`PJ4{GEYtJpfP?QzGH zYtI>RkIV*xQnoDNY}I(9A!wPd=yqK@5mhcVKQ&#^aJ6&Os@mt;$F|xfPi`SsWEj;Q z!CkSb>&<$z#$DTCm{U{#K%Cmgw)RS#nYt)jhc;z}d9}*0uLgz%e!OmnM76sg!)zcF z!%#0c&k#3+`$06CHJ70jOz}Dv(YkO9s(ys)dX8aTtsL_+uGP3@Xzvb=h3*#nJ*j>d z!{QaGR|bw#@%uKRL+zM`#oeYuY`*jdRBXqfR&)JGXooe^I+1g8#E+|9lPo1V%wDSJK`I>C3!v?^4FGLvm2&mybcJXi1nMFsb9N5Kqc6--HM0+S4?KR4(PAYzw`%}}^uF{#V{ zw=WG;otqZJr25I%%N^IDVie^)AZK`sJ9GuKZ-z2?8a+=$EvNRdOjpSe==Z1lCr&R_ zjaEsrG}4T8G<^Z~jf@aRNDj1}Dn`jxIsq8NIIWm08%dd*r)Zfx_yeK+3xvOt?a$Bp z@&~*5RC_P~J;L+=$xNn&NS5BuEkrXt7Jt#`VUEFI^NMf2SNr(FD z!LN~)`5_--=U|04+GOWz7cJzWF*zt6#!J$YVu z6q4wY%3d#x=lNi8lxp_w(-<7f-D!8ZM zBL(*v5*H22@GdiS=Z5bv#0qvrFr-R`B^H|XCE+acC6jhCC0pm_9qt%%9d5?FWy57q zizV&VQK~2G==WjPF}izkqMc|?T`#Z(rckJT-p~oh92^YPl{nMqO3)gp;zCe#c+J5 zw&$3WCq3KaCc|g|=b!7gr8gZ%Sf0i`yKd;(ls^CRs!xGSBk>6?{xzs%+FO?lm3Clb`>GIPS!IziyOS@O{*dn@cN{AG@Sa zr+nORF7}(ezEt5uevufOV0akP+EaADNG#;rMyK>hH)RUL;kI%Nzegf}k8Z0rE!_{M zNI?r6HyfU`|KM#IMd9T!dtd0 z3O-TsDLzwi5U(%{`*nUVACPKUXW3RgA}-Um?NLbbMxfYDCGdF~oQ9<|bQKi{1yvO_ zEUPfE!f+`1R6SRdq{ylY6Lkfa3L9iw`uRtSA-|7TO2rWzRnd@ozJQ~`l}d6^QtjT) zZG3`gW0>l|r*pV53~ZU%s&x#f_Qs34h&necdLDB3cZT0E^&uXb3@`6eVdUWeD9w)L z+D5g^#{}196=qob&uYSOq=Ia^jk*QPZPxwAGqdHU&4-&osoKsA^(?*-Tk*T|zF$;o zf-D%!g_`{CCoCI&OID=U#T8zGJJgMlV{=7$>*$V8yuBMB5@GW|*Ga?X^^lm~|u%_Z6zEbfH-eowkWtCw)uvdjv@~bc<6|ZvHCsDuFSKnGG_=Y}5$+lOU z4Tj&M-!%jX@^Ow^6;rrFfn>Bp+bm5xGzS+Ksk4ZRZ$oW+7^rN2H|qNkxxh`cOdVQY z!M6-2|AE$adl-(im%{|b_8=(osdJCfAC*H|y-G8UMn+?N=WyQgzH%eZ+^Hqu&ihWN;nFv4B&!i3_-eX_S3RbAj5B5)r^L zl9P56Z~||T5pp(!lSEL?PT@^L@5Ll?7)G3M&tL?jL~o4FkA+f07;nj+Ciy^0BdH0J z>I3@|7ZjXPa2DriBSs3(<1LzX;X-5z!G30azw8W~$hdL1v_9i>TT3$WimzCkvY(2sfFOMzV}-)6dtly9^2 zQi>?%2{Inizlck;+l9+`kH#3TU<$9(EJJ$(Gy*+%gs<@>eW4jz$&i>Ojn^=T;@_2y BCDi}` literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/window/WindowTest1$DeviceSource.class b/target/classes/com/kedacom/apitest/window/WindowTest1$DeviceSource.class new file mode 100644 index 0000000000000000000000000000000000000000..c561a801fd74cb5037a556f77928b81530dec5ec GIT binary patch literal 3042 zcmb_e>r)d~6#rea$wF8}Q9yjOS|0@zQ>#)d6s?Fg7DF|N)jo9DEU=L5#?1z>?}vTZ z_q)~hQ~QAr&UD63iy~8}pZl$UjvYt)yPE_y%2a1GGr5m*&z}1`zjN-n_wSomuL0PO zpQ3mKi7Ko`pNi+A2qB^3a1>$LABjRmq7q5j_siy}YzCy-u_zkwd^L{aglt}@#*28V z8ZYCdY)+}rrFc+_!zmH`2!+ew)MwY`>YCi0m<)9u#>)0EWpI)RgVbksCBIL{ih1gk^4_Rl_i4`Irw}%{mznY|{8)Kx)Pcxn%6*(0ivtJ%Djmfx^0+gfztu*`UXc$!|S+D*6y}FxhST!B@gK0 zz){*FlTO1%JgQ+mHgIu13kyjquw-6zK+lc%+1lvK0-3%yZ>3Wv&!Eg`9`TbJ#xWtA zNeyT4iiTJ5nugc$21BIbO}wSyZM>u6T@7dP9)qUgeSDzdL!2w22$Udd!}s_>!+Bg#@uR@DppknlKV?`8 z;S}h)zp5i}p9xW3wpdB#Bj`u3Zhjv3Ojq|D25#wmNas!t(^k)BO*j~|qUOf{TznpI2M48*_0Dm7Nmrx$G+dDk^< zFV;^~NBM%Fg=9~6Ut(WU;NgM+pW_8oi7%W>nw_-#}=QGWNg;D1214a-0Ro4Q=z{ z)HG_YV9^X}`KUXqh^bruw9R0#zzmiM>{6PP8Po~ZsKau!RNyZx+ZAqW3eTXvf|G`6 zG={SmpoXTPDD9C=vsiw-DO?{ZSGj_wX{@-6l`~jXfvH;;f5Yl!cxW1Hrf%(*o-4lR z?Wp1S6n)ZB3j>WvVGT^|XWxrqI2ge>SojsAxWwn;RiyDJGCoTO_|*zBvyJasg<2c1 zgQEz)*^PEQ!8dI!E|T{r$!;Tl!7g-=MRHfoQ2y$)L=RsR75(?qHO literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/apitest/window/WindowTest1.class b/target/classes/com/kedacom/apitest/window/WindowTest1.class new file mode 100644 index 0000000000000000000000000000000000000000..cdf0aa59162ce62a0e764cf1ef7efcb9499ff357 GIT binary patch literal 5217 zcmb_g`F9i775>JHMpgzeVhd}GV~D_jVncvnpaCynW0pn+holS7(z87FXhxAn2GTZZ z(llvG(x!XqnyzV^E+lOQg*NHFqGl6zeHFkC{4Ij*cqoFm;q5JW2i~cAXVgpR7>gj}e@jM5JQab3Of!4x*BpTjCxR>< z){%=~k)q7Q4Wppwro%WJ!8uGvpCT?tTr8u}!BmH1#?u5-l1wZF#Ja8I!pY zF=lZlI_xBcbxPz+H7-pyxf3QaV#7%%6Q7bPp<0nOU72^|XH7fhoQ;oq%?M|@dWfG9 zrmbOl?4jXFF)iYju+#B`n=|cnkH=r+(nMTR<1v&3H5#cGd$<30L^6;(hG;*u-fO z>2yw}g-bmR+yqF15?k_k!Oa$2AMAKm=7j6y2-+;NS?fGiRjv5**|PFa-UO$LxO=N? zm31baxbGi>_PEotpN!>A;Lg2+`g|h&=aMq3tdiI9G1|N%CG(R0Wtor2VUZb2i4G0B zVgW}n?P+I9#uH_#luy>PDL`|4Y*Hp&?jvM*7#i*je4PtH!-9k>l2b=T*7I#0AE)Yl zgbwAi9b>!i?iNDs? cRqgRJwHOqKc2&MjdwR~MVeJhKFoWst@l?0ixqX*n8uGnW zL&Oi|0aL|gYaqV1sgN?T6T5VL!oVl-DIK3Sa1oy|@L7D$z~}J=4cq4ztR22v_`D2! z5igM0LC0|!0U~=;x)V++zbJ$+wc;5zUv9-nqsoZt1p`mxD>}Yv;A{B0ju#Dl1K-r~ zEdwv%+e{eq6roGUcMSC7yG$G^_zZjxmzW0_Z#rHk*H`9`)otJqzEAD>YHXWy#ti%b zKh#k)a2Z!+qm4l~F1cvXO-fS+e&$inPd^5JuBh89nRL*yn1`$bxpYCLzv~gEVcnoT z&B#i%`99rNi8Y~ipuFZ6I(}*3R|>MV0_jV}@T^P)U;~7{r)%h+r7wESO{ZrKE2zL) ziCe>9Y*W1)HSaT^tB$lIW=8f-h@42e%sP43OlnwoBIhJ!KF`2bpBYm1#F>r4jIcT{ zOKE@hXP!o}TL4u@=t9Dtpultm%gkpq48;cDJbkr@RH|G`JX%-8N`U0O@*`eKU8T5T z;;y6qnn$h=(i6e2@tX*`@mpG;mP_0?PHBN1x5AyNd`g}_$fJ3(#{TQ@yqOI%d&m@{ zim^jkyX(m6ms_d^a_N(C-!b*POgeUo71gfTP+i_NAjtThI*bD*3P{XEtK{%cCk@#e zs;W*4wV2nHIKbQI6j0di`O96sR>R{pq*aDxTFy9jyyDdd%7x#+t$6g@)f3g;oMqwQ zYB&}=Is6=Zt6{@ZnZSMX*UQ`js<8W=h6^L9KWy%o`GTcN$n}*oZ;rxI!(tv&gPE-5S478zIuDjI8&#H;jHV$xA@URc1&g<> zLDmTJ;exOjoy&sqmdk?&XM!K$Rf@+38J2Y?tU;US(zr-U??$Jgt@hWTbQ^9&k}%V@ za0@x^!YJ*mguJ{o^q~TDRl=7&ln2r3U==f?M%JJcPH9WW>jr+0KN%Rsh=Bw~sw$e2 z-u*(KtOfVVB8%B~p|IS*gpR*Zp~H?dRmf_1DyYyBhA;SGVW%va@9-&mX4@$+Q?+n} zSFfJny|iqn*$aAk_$GJ@?$PmA4I3)1Pz6{m2}`sa(_uYhZo8_k(agUSSmpD*o1-{e zP0en;4DDrh8gMV)A#d__>|x*V3DASR9JOE{_LGW>wT);b958(a4a1$Ups|Ri&ZZ)o zM?0?}bow&%BEmoh=-_QxHW>KI7U>Zy*;E+7oImZ7kRO3*wR6vEd?~WPfAyF0X%%{aAF9*SFZ;9Hj`PIm7;z=vJ>k;#uSpXFRBW zcFIuqvR{VU%6=JYJ^N*-W$c%sT0B3vbPd~1N8^`q_iL2Vx8H1UdjrRz_WxEsQH1`B z4juPv3nHujgQ0(8hW literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/pojo/CarNumCount.class b/target/classes/com/kedacom/pojo/CarNumCount.class new file mode 100644 index 0000000000000000000000000000000000000000..90da8941bfd1eac7b0c8ba377113f7d731d6037d GIT binary patch literal 2436 zcma)8ZBrXn6n<{9o85$khVa%{L{wUn0L4~(DR0_RYN4dT<(Y6=*v&a-n$l`yz2C^XFLyHO{5k_r zqbY!vTNHj;_{|Y|qAvUZqL^^LuGwYYr76PAjUA`xP3Kt(pATe(SJHK=VW&Ztvid$3(UOg z?AOX3F=!2=j|5&#&kgEJ<(X2YCK4EJhGMf+w}=)~ZG4T1i?V9Vza4 z=}Zd)IBg+|S1g>tpu*t)^@D{eOjsDfSqtazmWA_jd=*0$rg2tbptaer)Jo+|r)uFc zt|)XzqUYp-vlhOe>p%7JIwwazM@<|t0hqg(VC+-EOlm<1a9m&GX@XRd z>V==6e(=?Xxh8yO2i*k*RKOc}lP4ub;M!^&JESm%VXlF()z+BBYhxU5jojJRIEQ>_ zJjGBk2~`+<0`+4{Xv4Se4>ZEOB`pC&u3Nz92|s6^Aoj9;1W@rahVc`Am{0s={YXK? z51TpgqvTcwZ&MpBd=Fha9Q_^Ix6tECpoi<8`EbesW3^K~@VTrl3jDV0)A%1OFjPagLoCze#j_h*|Dp=p}A* z%q-5P86a0s5=3r5dqG$|G1_4KF80&b7JVjq? z_nW-k$tiLf^P%y5CaO`Rw?Je6Jr@S~7z^WVUQ*KcRS5KtTCz8M+4SKLJL#BS`Kk~{ K#paa3wD2#YcdDEK literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/pojo/DeviceInfo.class b/target/classes/com/kedacom/pojo/DeviceInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..724750c4717ee187ab96cc095a504c594203f299 GIT binary patch literal 2413 zcma)7TT>iW5dO~W%hGhZ^%P#IEZ$A0r z5Aa1_d^0atrB$-2GF2&k&{X*s{3~kwdS7pGj5ysP}Vyp?#lX+iH}WuBI>6m zK9hA-zP}xUt)Lg|9Y-NHw`JeA(|NnFkzT5la)pgig$a@B#jRrcx^q95buxu}MWz+zsY`xlfp~(siD$}BPjXszGvuD+SU$+HEq*e^ z#0sPN#Q~lk&m6c80lDn~>hW3G3_71z?K~5G2Jq(EmXocFChn4&;YFZwLJ zDB>LY6?&f2E(=%jriC~X7Lp=T7_u;c^A=~F8`qFf=%}B)$!adY?vyM{#nnju4D}-w z4TF?H*V%*%)GhA=yo^_9DPfx-N`Kt zgNJd^4<2EW8e@XV)IQWtb zRl#{3Z%|4*MiAhS)OBtj`e|`wDg=iY$jAAMQ)CclJC*z%hQ62j4aT=H0(+@nVayLD zYY4g~mCz9XzLPx~CJpnz2-66E{f)mBS)dsi(TAU)sZ0L@XCA;B?$T>$a*=fDf8f~U zc}=+FrE%DVZM=ocOtK9tc$?FxVUBOc75V~LZYsgWk)`OUSqY?J3hWNQP26X@F8srN>7OO-V_7()^OP2qO1u;t`tfJVZ;Z zwT39Gh;WIW@$^s)vDgcqZi;@^)5A5i#oDRY&{6-Qc%*tS%7kBvl6ToZ_vkr#h|c;6 zHXGjSX}s$P=b5zhp*zW7_iiV9c`=iH`v@f4^#*q$>>_$&)_vIHZvU92g8Cn`L{{g$+dv^c; literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/pojo/DeviceStatusStt.class b/target/classes/com/kedacom/pojo/DeviceStatusStt.class new file mode 100644 index 0000000000000000000000000000000000000000..46ce747408bbac105399592fb05d147f39c85898 GIT binary patch literal 2819 zcma)7-%}e^6#j0qo82S}q{t6r(FVjegi!oZt%Xvxv{f+BTCld&Doa=)G)*vUI@1|_ z^2I;E7k%lQeW^1#Bk7FJIQn8|{6l>3Z&2%Z?k<5QabyPWJ?EZ1=X~d!@810W&yPO? zIDxG=Vt7ZE%d#xVvMkHH7Oo_?zbDI8S+2=)U6%J{`5=KI+>qr%3m+xWgB2UD?5j44 zvai|jWdGR4x{VDRCDAs;WyQix1*78L@)UXto9=CQvg}sYCzt$Msj@z;5Zm@$zrL-Y z<`nvh)rw!L)V*`{n(LRUmF1E+s(FQ^U-jMctXo^G-(o~x8?1HDU(~VtvSXd18?)6l z2Iwi2DjpqIz1p(7TGm*qMYnv#t(8O%4-J2#L?k1HV)fSKO>fPWeXF`zojm8=E)~5c z4Ry))i962JfvynEjuHGIPi8yfr=1ma)4sgF2tgkdXl?J-(VuNEW9$mk@r&JbMs`k) z26@yupOKxH54!om;|b+JH!kLVQg_R&^|5>xS2w+)KRtGxEw4U4uh67mR{agHMnKZ5 z(O|F%eHJQRgju|~;BM)rl3khtcG0bzmz)arhP%BH%*DKPd2Zo6Nl^2)>t&yCMmsaW z91R9;hDmI{8Zd~yr%RQRe@0J%MW;J7aBhB1HzcuCt=Ed)g_1C!uVtpkg`5ta#xo9% zAmd;dBMzPwX%r(0ng1h&gL9a6kjI3Blm=f!GOmK3o_uy>3R9^FH z4hmRc6IzgErOPu8${_RO`OLPap+2ZESf0q*Z;du{h~4?jzMC_nVDW$)prpneyp5v@ zsXaWwoY_@(Ys;&wDNJFCTc zH=QFvU}lbf+v42S(V6sUI`6?YS~GWdbSABu&U=~7*33N}onORDq4N|Q93k3RZhQyo z`xe}m_8thn2s zIA|Q9mc%*L8IO6;I6_T{!yC_4xb-Itk{Y-(p8E!-aew?*#J+|Zy+8g7Vhj0P1C~}P z*m?fn6&sZ}mH3xmg<67IV%LeTuvA%anp!nZ2K0W)p+S%z{D5TN#G=gE(!5xsjSaZOja%rZ=QfD>Kre zv!V{CGM^29{>93!Eun46lcpF4Oj-v_G1I}Bvg9yrJ%pVazXv;QHPB5@f!E%mGvqrH zhw!3o$OX+36Ibyjr3m^khqpNKDBt=#N0P%(AkC-hu0H26_cQx85fL*>0e(w?B~M4Gi=S2695qpA6)r zoTn)_@Ko!Q7)&5|5({C8N`8bw414eC0~~H;zuoa|DPS>l{*(pC&@wqX>-Qx$#K$2w z%$uF-H+Nv<24XvCyH#-=H|Tq&NsCPQ>M)-ENf1_L8QNR8gM2dH08S5??0)0*OGWHK~5xuls%d_1p68*XIKO<9H^c2E$cQWK>~<T8;XYvSNBWl;q=dbyGt{LFOJDG|R&-}cT`@`1 zn6fq1Tvi=Jtcyy?T{m(J)$_YaQ+4OnEJJ9{vUDe5s=1s_ThWweZz-Glsw(7;rlf6c zQ+J=+&T7K;EVuXAG|s@+j!-5esSR~oRZP{&C~4O*tV}#*I~hgIs@l4)teJ+jsd%no zDhb;(b*qUmKNtd`U6*v%ff#JLE1y8M8e zHIzJG*UOr^vLwdQ>GEq!G;@}#XLKk2fIf!Ww5w{HT%9&Dmg;&A1@+BexcUF{7jZik@Wqu4is zy?Cc0yV&cZy>8O9!*@vLoZ}`(4@WP@E&4IS_=!IH1R;tJA~f@%zkY@u9Hp6f r@HoNxNy^cIuc#W_L-lzslZ!M@F#Sc;0SxBRhtMq0=suYq+l1=hm&fyk literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/wc/SocketWordCount.class b/target/classes/com/kedacom/wc/SocketWordCount.class new file mode 100644 index 0000000000000000000000000000000000000000..801a4d9eda91749517b22ef55929447055af7ae1 GIT binary patch literal 3096 zcmb_ei&7I;82%1P*d(rsK|s`6Y}H0VS1sBKlvcSY7%mD*t+nlv9Kyn8H{IO`>CN6| z`aHEW(O#wx(1+^uJJ|@q1O%ta%%0uz-@gBP&OiVD@i%~e{G7xw3@7j*K8oXd5;riC zKsQF?7~6+&+)UyYCe&jxiQCA;VW@Q~j!SBtR+JeHvq`jJIEg#Bo5URElemZbaa>V5 z3vqm`*dA#3B#DRkRKp{I#8i3QHiId%D45V767Kq}*UdBeAt`d5sM zo6k#cP@r|la;#vOJn6Id1)?KvP6`~%SdN@76&9s8Z!X&0p>Wo;@0*^bzH6J&VA-Pj zo=ny)7^^a8s&y@E%(>ZB87#P7Zp1A)0nJ1UrsW89rXOZj%*Uo-n@--C3p~ro4_57( zUY?rTn~(`jI*$czR^gjPGrKH}CEIdV4L|UtS)dNXELsM+EYEcc(g~DmQpVP0wiH;d zGqy=0nEgf5GYc}HbFOO(Fd7WZ7R^du6)44R-O_vr;f}E>M~e}^RABtJW}#esk%`II(mT|Mf0(v@c}->8M=>ZB zZE4J_=jA3w>tIYcfmD?_%)dZ#Y&|QBDucd;&jjK_Sth<(ugN*LawNiW5JU7>qRkhlqxF{ucEFq^MuVWdO zjuotGuyqvR=x|Zg@g+PRKA7tC&gFkD|;Cq1+JKNImgN`5ZlR(>MY0fOJ$SiTTZ*FbGbqnKM*$*VkEaH~P z-Vvt7a*bK`X%Ln$lM<@gx-Fm;6_d>-??~6>lTt5wyzS-j!<<;ok}ELQP&r`;_SV@< zXI=))dR|~6efCvFz3cIDz?Xp<2(~S4%V)SI(-Z%n_VW#~*l8BAC6+w5aJ@P`N1IO9 zM!$Dbs74K=C~&4(78?`G6NK#S+HLaADcBa4^}JlK)sVoQCdywO!=|$_90P>i-w?R1 zMbuQ9b-VQ9(0r0^9x8TR!F7zKl9R1YBBOT9j@LE@Uzz+m({rq8Th5dM9t>ee%@n0) z2Ch1cM|bbS_IdK@rTA-GiwURIRorquV<|46*7^5twdL zFMEml=21#>t5mGX>eYZp$LQ`ghHlMB4 z&4W0_cRgglX`JC#0`DMAE((idh(Y6?e2SJ-q=M*E#8R!lLuKHZnvU%`Q^(cbeNq#YcHb;tfh+k_|yIWHo6?882 zrn)LPvY^04s^A82fbWM8M~eS;bmB0Mql-QrA+&B>q@UOLl_AJkO57v#M}(atRXKDk z1dX#e$FEMzpcj2~@+3xa9vA3b8Xqt+7isSz57kS!j3_ns;ay(JW7OBi-F^n?YE{0a zMtg6A_C9IXNQ+YI0CB23gz;9Z`Xy4`&vEoO#FSg2F6R4aeu#T5gzyH}B<5>Npbr E0fOR;>Hq)$ literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/wc/StreamWordCount$MyFlatMap.class b/target/classes/com/kedacom/wc/StreamWordCount$MyFlatMap.class new file mode 100644 index 0000000000000000000000000000000000000000..7b8d10a7edaba07607ee62b99e55fb1eb8e48d57 GIT binary patch literal 1890 zcmb_cO;Zy=5Pd^78CarxnJ6k41Tg`06%aJR4~(Ex1vrGlvOEpTCax^Ism-qF-75cw z7cXAC_*rFn_U7Fm;z{kN0YxWsW; z#W*HZD41-=6-;qVt59*3Bh8WFm|=*_n6~NNUWE9pCnbwp}v}yih}#O6DGmCqlD?U6d}SUCiVhx2TDd&>tCE!7}X)&G$@8 z%Q}{2=$_+d0{&ZsEZH`=Gce*4a(s_r;6N;futXw{o`=n_;=AQ|R;o$j9t1tpctDg) zE#T|IY>!S;-z;bv~okKst(6Z!_}ALJ#-?li}Bj(!Gp?x}8+Jkznu z9F*s_yjiq`=ev~D7k?r1|K~6BwkzSwYmX_ThfDbDI#K@UCk3YZ+jMNL;M;m2hE^@v z`KqCr-VGJ^&zVy5j_>NmyeWI?*q&y%D2pJ9BRERMnuy{iZZQlWjs(YS6t|I;?sq8n zQOseUp>uB^L=nevj=K!W!*=E_l#0d-SDMl~NMwdH4Su`3m>O<}@^~z4G)h#Og`ao#@|R zVhqq@+zxs)>GclLNSUW^2dy+38I9qQcVKU5(t=LfpKWn?ToMT92$2J*~3tm+)43=zHtcLYn;cxI=ha{PjXK`nf`?gvi z36pZ)CLcFSmRC0qM3t-gC(B%yzTovO&#x|cp)2#`x6W;sVK}=}dd8n~)8TGSnb~eF zAI0T7Cghl!u;e1}a9TLy09 zdjs3}!N3kG45P1i#&G$hw932Bge9rAPeg5sP8qH@11YFt5?)B=Lovg)XRc9~$e1|d zH+FMc%%C-tkwYyulJT*X)~h55q`J$ZmbbP|S|?s={-(=%ql&HSTlA z5sn=YDa+a7|L5JH>#4dS4rN@GYuza8l}gvHk87PyX{ra?U3b$l?j2v#KWEPZP`yco zSNB|VFLbF1sK?Bsi+$-xknhP-N9c7rd`FZ+NmpK6VC9DJx%7NWVe$MayxI>#>OeH- zn+*BvPVW=!!1hEmMYUb^56=&#W236cHwyadM2L`7)ME^@z3aRqkHz+tuhDdAYrKWQEfqNd6?p;|XdJ`<0X7J7CIUM|QAdy?JogF5 zG_7Xw0UlvALO2zpAjv50HAw#7r+Hn&f5!&mxgO72GVoa0%HoYbB3E2*}b$8mj dEa}Ebmn08&Nk2~SeYl4!H0vZw6S54_{{i%>(lh`7 literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/wc/WordCount$MyFlatMap.class b/target/classes/com/kedacom/wc/WordCount$MyFlatMap.class new file mode 100644 index 0000000000000000000000000000000000000000..6adac095d7618a1dd0be8bfa776ae3ddb7aeb792 GIT binary patch literal 1866 zcmb_cOH&hS(ff3Of{F&>8K~A*;~q{zN(6KM^m2L z&T7K;EVt*_DbB#xivE**sSR~oRZP{&C~4O*tV}#*I~hgIs@l4)teJ+jsd%noDhb;( zbm?hK5W_-)T+=)4e%As~>*qxoeetd`S>*v%G`;amhgUH*ZZHIzJG z*UOr^vLv3P)8%1HEOVBtXLKk2fPM_MX;;-YDf4+n^14oO+~>H#AkV(i^sH;xR*r)d zu1*^nOLaYmI(=UtHNBMK34#`;w%b>n9RSmA7SE%9>|s`D7@CVoeqd zmGWIyasRB8oVGnj)02kirn=)c7!mS^P>VV$(`X0}@ra@Ka^X2J#;2Ov5HQh3KmhPTss;!4B=8zC113imt1tx z(5(RtN1D=pT1jns*3+9pE2A|qun+cuHa;}aGnh9<&`A5x(FbTknBM3vXeAKg{2c+B z^FVB{$+rjp!f;HANC%Sv|70*63qH%AZ0P5Lv!_=#Tn2|}a``e^4vf5Qx2cz|}|!s7(%r&S&p k{EDifJyicGWpaV$38ue*I*6e>`Y^5tG>RwFWt&m`8-@7kQUCw| literal 0 HcmV?d00001 diff --git a/target/classes/com/kedacom/wc/WordCount.class b/target/classes/com/kedacom/wc/WordCount.class new file mode 100644 index 0000000000000000000000000000000000000000..7545839b87cab25dbbc8ec450c90fd2a3ac360d6 GIT binary patch literal 1923 zcma)7ZC4vb6n=&THrcMFB|=}cDy7;`3X4EnO%QD%v}k~8u%4dg%di=iZ8x(yv$F_4 zOFyI@_4wK2kMekDlLoK}C40`y&V70Ab6jE3w&v#gt9p_2<%PmyY@Mv2sALTvItGE5X-RA2G~?uK0YZcVE|`sFktS3Y4B`lyMNkOvI&)kyg+ zZ*gy5xO-tBU(q3OQ@F~Z@Dd$FvLX)x70IUPMBNKItlx@Bj2c{XhN&}9*T|wK4E;=$ zXkvdl`=i#I3Osl>$nx8HuMn_4kLTdLbl!MLX}tOVX!NQo@kkZ z#TLG%b1h1gC)U$)UF-YJyu@b^uDe{oW_Xj`yvdZIen-dJi!LT%|UZ>t2eL~zIE^&sungKY+>8N zQwQJU2M0A27_JUNV7PSL`t9A9!lO18jzzsPoHDE(#ac8O#yj;3BKIi`s-|%jyh+vT z0Gt*xSS@1|(v*)EPZa*dkk1WnWWNDsxZ(@lU$ao0K4WtF`4Df1_&0XMq3-l~tsl)Z zP@|SmTt_N)(+?x4B~_2pI+6e$HU%-uGut=T`2d;S{vHtg)5_VY|; zyNwIkHk?xS8g1{HXc?GjcVN?cf&RA~dJNG~l3&IRB6^#s&QP>@;&P8T7)DE-sQ3UM z(#awJ8~BJ=j*|7q_=MPvQ^J$DN%-@W%M`t3af@sxdb&@0y3a^=n{-)1D3X4f-iHYD OGVM0Wa>VEo^8W!N#TZWj literal 0 HcmV?d00001 diff --git a/target/classes/deviceinfo.txt b/target/classes/deviceinfo.txt new file mode 100644 index 0000000..b4523df --- /dev/null +++ b/target/classes/deviceinfo.txt @@ -0,0 +1,12 @@ +"dev_1",0,10,1625819869 +"dev_1",0,10,1625819865 +"dev_2",1,20,1625819869 +"dev_3",0,40,1625819869 +"dev_4",1,2,1625819869 +"dev_5",1,5,1625819869 +"dev_3",0,40,1625819870 +"dev_1",0,60,1625819873 +"dev_1",0,30,1625819875 +"dev_1",1,30,1625819880 +"dev_1",1,10,1625819895 +"dev_1",1,10,1625857320 \ No newline at end of file diff --git a/target/classes/hello.txt b/target/classes/hello.txt new file mode 100644 index 0000000..4c3331a --- /dev/null +++ b/target/classes/hello.txt @@ -0,0 +1,6 @@ +hello world +hello scala +hello java +hello flink +test for flink +nothing \ No newline at end of file diff --git a/target/classes/log4j2.properties b/target/classes/log4j2.properties new file mode 100644 index 0000000..8e59a23 --- /dev/null +++ b/target/classes/log4j2.properties @@ -0,0 +1,28 @@ +################################################################################ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +rootLogger.level = WARNING +rootLogger.appenderRef.console.ref = ConsoleAppender + +logger.sink.name = org.apache.flink.walkthrough.common.sink.AlertSink +logger.sink.level = INFO + +appender.console.name = ConsoleAppender +appender.console.type = CONSOLE +appender.console.layout.type = PatternLayout +appender.console.layout.pattern = %d{HH:mm:ss,SSS} %-5p %-60c %x - %m%n diff --git a/target/flink-test-1.0-SNAPSHOT.jar b/target/flink-test-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..1dc38dd1a75581df42a9a02c8124aca42045c0b7 GIT binary patch literal 99166 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

Y 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∈F?au$2wIR>qlBJvl*K0RD-bX`>6vSony5I7qe8xaQmOKGU{?m8S%zqf?} z{n|C$$kV{_8ygYU`4fq7;!UJYFwMT|>>rsS^TLmY*z?awrG08RuRT~?VN8V}s$E%F zVeNW&<;ZDfigz{92po?cZ8$O?xqfrBJgRcX&$Ok<(sYG0S+Q9wAlpVw*t^Q2keFx_ z;XG^!DsaxbY)`OrzT_bj0aoIo-0EtcKs=WHH`r5RpFkyjh+?DPFu!(QiB~l@i?+cO#}wG?!-~DiZd+B~*V-V^Et}9g%xV_s zx1yh_ypcvq(DG1K`WQ9Qi7idZ~4LVZILS4GaQnjtkUK3W$(m4V+6s=bhp6ya$G+;nqH)6sj+}LBuMljk zTr@Y=G)03+HT#T)VP@XrkQX*p2tSrTgS}NC&H=QD-t1012J3AFiTZ-E9gLD6bL$1{x{iMCo z+TTML##NDT#r2tdw;!OXGsQwEB zdGm8fn;U0JCDZ3Vs;p1AYWp%Rl@NP=0L#gbPrZ;de~2kI8;W9cqAwjcj!Dc;^KmH{ z3+?`x;jmD$9L+^we-NbgZm-`=nIW8PA=K�uu@fMJIO!g?BvzVJY3GqQJ@n#WdaO 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�Hog{z6?Pjbo3l} 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 KX#