From 70272eb6ec98ba5b3d081dcba94a4e0b3c33505b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98wangchengcheng=E2=80=99?= <‘wangchengcheng@iie.ac.cn’> Date: Thu, 16 Dec 2021 09:59:21 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=9B=B4=E6=96=B0=E4=B8=BA=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=A1=A5=E5=85=A811=E7=89=88=E6=9C=AC=202.=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=E5=90=8E=E7=BC=80=E7=A7=8D=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/compiler.xml | 3 +- .idea/modules.xml | 2 +- .idea/workspace.xml | 438 +++++++----------- log-completion-doublewrite.iml | 186 ++++++++ pom.xml | 6 +- properties/default_config.properties | 74 +-- properties/file_type.properties | 5 + properties/service_flow_config.properties | 35 +- src/main/java/com/zdjizhi/bean/FileMeta.java | 51 -- .../java/com/zdjizhi/bean/SourceList.java | 22 - .../com/zdjizhi/common/FlowWriteConfig.java | 83 ---- .../topology/LogFlowWriteTopology.java | 75 --- .../java/com/zdjizhi/utils/app/AppUtils.java | 123 ----- .../utils/exception/FlowWriteException.java | 18 - .../functions/DealFileProcessFunction.java | 123 ----- .../utils/functions/FilterNullFunction.java | 17 - .../utils/functions/MapCompletedFunction.java | 28 -- .../com/zdjizhi/utils/general/FileEdit.java | 40 -- .../zdjizhi/utils/general/SnowflakeId.java | 213 --------- .../zdjizhi/utils/general/TransFormMap.java | 146 ------ .../utils/general/TransFormObject.java | 153 ------ .../utils/general/TransFormTypeMap.java | 146 ------ .../zdjizhi/utils/general/TransFunction.java | 316 ------------- .../com/zdjizhi/utils/hbase/HBaseUtils.java | 201 -------- .../zdjizhi/utils/http/HttpClientUtil.java | 77 --- .../com/zdjizhi/utils/json/JsonParseUtil.java | 283 ----------- .../com/zdjizhi/utils/json/JsonTypeUtils.java | 187 -------- .../com/zdjizhi/utils/json/TypeUtils.java | 171 ------- .../com/zdjizhi/utils/kafka/CertUtils.java | 36 -- .../com/zdjizhi/utils/kafka/Consumer.java | 43 -- .../com/zdjizhi/utils/kafka/Producer.java | 79 ---- .../com/zdjizhi/utils/ordinary/MD5Utils.java | 64 --- .../utils/system/FlowWriteConfigurations.java | 70 --- .../utils/zookeeper/DistributedLock.java | 190 -------- .../utils/zookeeper/ZookeeperUtils.java | 140 ------ src/main/log4j.properties | 25 - src/main/logback.xml | 42 -- src/test/java/com/zdjizhi/KafkaTest.java | 55 --- src/test/java/com/zdjizhi/LocationTest.java | 28 -- src/test/java/com/zdjizhi/TestTime.java | 19 - .../classes/com/zdjizhi/bean/FileMeta.class | Bin 1561 -> 0 bytes .../classes/com/zdjizhi/bean/SourceList.class | Bin 802 -> 0 bytes .../com/zdjizhi/common/FlowWriteConfig.class | Bin 3680 -> 0 bytes .../topology/LogFlowWriteTopology.class | Bin 4907 -> 0 bytes .../com/zdjizhi/utils/app/AppUtils$1.class | Bin 1371 -> 0 bytes .../com/zdjizhi/utils/app/AppUtils.class | Bin 4560 -> 0 bytes .../utils/exception/FlowWriteException.class | Bin 490 -> 0 bytes .../functions/DealFileProcessFunction$1.class | Bin 616 -> 0 bytes .../functions/DealFileProcessFunction.class | Bin 6514 -> 0 bytes .../utils/functions/FilterNullFunction.class | Bin 871 -> 0 bytes .../functions/MapCompletedFunction.class | Bin 1641 -> 0 bytes .../com/zdjizhi/utils/general/FileEdit.class | Bin 2333 -> 0 bytes .../zdjizhi/utils/general/SnowflakeId.class | Bin 4120 -> 0 bytes .../zdjizhi/utils/general/TransFormMap.class | Bin 4710 -> 0 bytes .../utils/general/TransFormObject.class | Bin 4818 -> 0 bytes .../utils/general/TransFormTypeMap.class | Bin 4876 -> 0 bytes .../zdjizhi/utils/general/TransFunction.class | Bin 7759 -> 0 bytes .../zdjizhi/utils/hbase/HBaseUtils$1.class | Bin 1394 -> 0 bytes .../com/zdjizhi/utils/hbase/HBaseUtils.class | Bin 8565 -> 0 bytes .../zdjizhi/utils/http/HttpClientUtil.class | Bin 3800 -> 0 bytes .../zdjizhi/utils/json/JsonParseUtil.class | Bin 8639 -> 0 bytes .../zdjizhi/utils/json/JsonTypeUtils.class | Bin 4732 -> 0 bytes .../com/zdjizhi/utils/json/TypeUtils.class | Bin 3357 -> 0 bytes .../com/zdjizhi/utils/kafka/CertUtils.class | Bin 1782 -> 0 bytes .../com/zdjizhi/utils/kafka/Consumer.class | Bin 2220 -> 0 bytes .../com/zdjizhi/utils/kafka/Producer.class | Bin 2767 -> 0 bytes .../com/zdjizhi/utils/ordinary/MD5Utils.class | Bin 1948 -> 0 bytes .../system/FlowWriteConfigurations.class | Bin 2699 -> 0 bytes .../DistributedLock$LockException.class | Bin 973 -> 0 bytes .../utils/zookeeper/DistributedLock.class | Bin 6206 -> 0 bytes .../utils/zookeeper/ZookeeperUtils.class | Bin 5517 -> 0 bytes target/classes/default_config.properties | 50 -- target/classes/service_flow_config.properties | 72 --- .../com/zdjizhi/KafkaTest$1.class | Bin 936 -> 0 bytes .../test-classes/com/zdjizhi/KafkaTest.class | Bin 2220 -> 0 bytes .../com/zdjizhi/LocationTest.class | Bin 1497 -> 0 bytes .../test-classes/com/zdjizhi/TestTime.class | Bin 875 -> 0 bytes 77 files changed, 429 insertions(+), 3706 deletions(-) create mode 100644 log-completion-doublewrite.iml create mode 100644 properties/file_type.properties delete mode 100644 src/main/java/com/zdjizhi/bean/FileMeta.java delete mode 100644 src/main/java/com/zdjizhi/bean/SourceList.java delete mode 100644 src/main/java/com/zdjizhi/common/FlowWriteConfig.java delete mode 100644 src/main/java/com/zdjizhi/topology/LogFlowWriteTopology.java delete mode 100644 src/main/java/com/zdjizhi/utils/app/AppUtils.java delete mode 100644 src/main/java/com/zdjizhi/utils/exception/FlowWriteException.java delete mode 100644 src/main/java/com/zdjizhi/utils/functions/DealFileProcessFunction.java delete mode 100644 src/main/java/com/zdjizhi/utils/functions/FilterNullFunction.java delete mode 100644 src/main/java/com/zdjizhi/utils/functions/MapCompletedFunction.java delete mode 100644 src/main/java/com/zdjizhi/utils/general/FileEdit.java delete mode 100644 src/main/java/com/zdjizhi/utils/general/SnowflakeId.java delete mode 100644 src/main/java/com/zdjizhi/utils/general/TransFormMap.java delete mode 100644 src/main/java/com/zdjizhi/utils/general/TransFormObject.java delete mode 100644 src/main/java/com/zdjizhi/utils/general/TransFormTypeMap.java delete mode 100644 src/main/java/com/zdjizhi/utils/general/TransFunction.java delete mode 100644 src/main/java/com/zdjizhi/utils/hbase/HBaseUtils.java delete mode 100644 src/main/java/com/zdjizhi/utils/http/HttpClientUtil.java delete mode 100644 src/main/java/com/zdjizhi/utils/json/JsonParseUtil.java delete mode 100644 src/main/java/com/zdjizhi/utils/json/JsonTypeUtils.java delete mode 100644 src/main/java/com/zdjizhi/utils/json/TypeUtils.java delete mode 100644 src/main/java/com/zdjizhi/utils/kafka/CertUtils.java delete mode 100644 src/main/java/com/zdjizhi/utils/kafka/Consumer.java delete mode 100644 src/main/java/com/zdjizhi/utils/kafka/Producer.java delete mode 100644 src/main/java/com/zdjizhi/utils/ordinary/MD5Utils.java delete mode 100644 src/main/java/com/zdjizhi/utils/system/FlowWriteConfigurations.java delete mode 100644 src/main/java/com/zdjizhi/utils/zookeeper/DistributedLock.java delete mode 100644 src/main/java/com/zdjizhi/utils/zookeeper/ZookeeperUtils.java delete mode 100644 src/main/log4j.properties delete mode 100644 src/main/logback.xml delete mode 100644 src/test/java/com/zdjizhi/KafkaTest.java delete mode 100644 src/test/java/com/zdjizhi/LocationTest.java delete mode 100644 src/test/java/com/zdjizhi/TestTime.java delete mode 100644 target/classes/com/zdjizhi/bean/FileMeta.class delete mode 100644 target/classes/com/zdjizhi/bean/SourceList.class delete mode 100644 target/classes/com/zdjizhi/common/FlowWriteConfig.class delete mode 100644 target/classes/com/zdjizhi/topology/LogFlowWriteTopology.class delete mode 100644 target/classes/com/zdjizhi/utils/app/AppUtils$1.class delete mode 100644 target/classes/com/zdjizhi/utils/app/AppUtils.class delete mode 100644 target/classes/com/zdjizhi/utils/exception/FlowWriteException.class delete mode 100644 target/classes/com/zdjizhi/utils/functions/DealFileProcessFunction$1.class delete mode 100644 target/classes/com/zdjizhi/utils/functions/DealFileProcessFunction.class delete mode 100644 target/classes/com/zdjizhi/utils/functions/FilterNullFunction.class delete mode 100644 target/classes/com/zdjizhi/utils/functions/MapCompletedFunction.class delete mode 100644 target/classes/com/zdjizhi/utils/general/FileEdit.class delete mode 100644 target/classes/com/zdjizhi/utils/general/SnowflakeId.class delete mode 100644 target/classes/com/zdjizhi/utils/general/TransFormMap.class delete mode 100644 target/classes/com/zdjizhi/utils/general/TransFormObject.class delete mode 100644 target/classes/com/zdjizhi/utils/general/TransFormTypeMap.class delete mode 100644 target/classes/com/zdjizhi/utils/general/TransFunction.class delete mode 100644 target/classes/com/zdjizhi/utils/hbase/HBaseUtils$1.class delete mode 100644 target/classes/com/zdjizhi/utils/hbase/HBaseUtils.class delete mode 100644 target/classes/com/zdjizhi/utils/http/HttpClientUtil.class delete mode 100644 target/classes/com/zdjizhi/utils/json/JsonParseUtil.class delete mode 100644 target/classes/com/zdjizhi/utils/json/JsonTypeUtils.class delete mode 100644 target/classes/com/zdjizhi/utils/json/TypeUtils.class delete mode 100644 target/classes/com/zdjizhi/utils/kafka/CertUtils.class delete mode 100644 target/classes/com/zdjizhi/utils/kafka/Consumer.class delete mode 100644 target/classes/com/zdjizhi/utils/kafka/Producer.class delete mode 100644 target/classes/com/zdjizhi/utils/ordinary/MD5Utils.class delete mode 100644 target/classes/com/zdjizhi/utils/system/FlowWriteConfigurations.class delete mode 100644 target/classes/com/zdjizhi/utils/zookeeper/DistributedLock$LockException.class delete mode 100644 target/classes/com/zdjizhi/utils/zookeeper/DistributedLock.class delete mode 100644 target/classes/com/zdjizhi/utils/zookeeper/ZookeeperUtils.class delete mode 100644 target/classes/default_config.properties delete mode 100644 target/classes/service_flow_config.properties delete mode 100644 target/test-classes/com/zdjizhi/KafkaTest$1.class delete mode 100644 target/test-classes/com/zdjizhi/KafkaTest.class delete mode 100644 target/test-classes/com/zdjizhi/LocationTest.class delete mode 100644 target/test-classes/com/zdjizhi/TestTime.class diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 5cc2379..07e44d7 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,10 +6,11 @@ - + + diff --git a/.idea/modules.xml b/.idea/modules.xml index ab6cd18..477fae9 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 3faf420..0dc48fe 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,250 +2,83 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + @@ -331,44 +189,98 @@ + + + + - + - - + + - - + + - - + + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + + + + + + \ No newline at end of file diff --git a/log-completion-doublewrite.iml b/log-completion-doublewrite.iml new file mode 100644 index 0000000..a785e47 --- /dev/null +++ b/log-completion-doublewrite.iml @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index e9fbf1c..077ee70 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.zdjizhi log-completion-doublewrite - 1015 + 1214 log-completion-doublewrite http://www.example.com @@ -37,8 +37,8 @@ 2.7.1 1.0.0 2.2.3 - - compile + provided + diff --git a/properties/default_config.properties b/properties/default_config.properties index 94c70a5..aeb0309 100644 --- a/properties/default_config.properties +++ b/properties/default_config.properties @@ -1,33 +1,4 @@ -#producerԵĴ -retries=0 - -#ĺ˵һBatch֮ãBatchûд뷢ͳȥ -linger.ms=10 - -#ڳʱ֮ǰδյӦͻ˽ڱҪʱ· -request.timeout.ms=30000 - -#producerǰbatchз͵,δСĬ:16384 -batch.size=262144 - -#ProducerڻϢĻС -#64M -#buffer.memory=67108864 -#128M -buffer.memory=134217728 - -#ÿη͸KafkaС,Ĭ1048576 -#5M -#max.request.size=5242880 -#10M -max.request.size=10485760 - -#kafka SASL֤û -kafka.user=admin - -#kafka SASLSSL֤ -kafka.pin=galaxy2019 - +#====================Kafka Consumer====================# #kafka source connection timeout session.timeout.ms=60000 @@ -36,15 +7,48 @@ max.poll.records=3000 #kafka source poll bytes max.partition.fetch.bytes=31457280 +#====================Kafka Producer====================# +#producer重试的次数设置 +retries=0 -#hbase table name -hbase.table.name=subscriber_info +#他的含义就是说一个Batch被创建之后,最多过多久,不管这个Batch有没有写满,都必须发送出去了 +linger.ms=10 -#ʼĬϱ -mail.default.charset=UTF-8 +#如果在超时之前未收到响应,客户端将在必要时重新发送请求 +request.timeout.ms=30000 +#producer都是按照batch进行发送的,批次大小,默认:16384 +batch.size=262144 + +#Producer端用于缓存消息的缓冲区大小 +#128M +buffer.memory=134217728 + +#这个参数决定了每次发送给Kafka服务器请求的最大大小,默认1048576 +#10M +max.request.size=10485760 +#====================kafka default====================# #kafka source protocol; SSL or SASL kafka.source.protocol=SASL #kafka sink protocol; SSL or SASL -kafka.sink.protocol= \ No newline at end of file +kafka.sink.protocol= + +#kafka SASL验证用户名 +kafka.user=admin + +#kafka SASL及SSL验证密码 +kafka.pin=galaxy2019 +#====================Topology Default====================# + +#hbase table name +hbase.table.name=tsg_galaxy:relation_framedip_account + +#邮件默认编码 +mail.default.charset=UTF-8 + +#0不做任何校验,1强类型校验,2弱类型校验 +log.transform.type=2 + +#两个输出之间的最大时间(单位milliseconds) +buffer.timeout=5000 \ No newline at end of file diff --git a/properties/file_type.properties b/properties/file_type.properties new file mode 100644 index 0000000..8ffc908 --- /dev/null +++ b/properties/file_type.properties @@ -0,0 +1,5 @@ +txt +html +eml +jpg +png \ No newline at end of file diff --git a/properties/service_flow_config.properties b/properties/service_flow_config.properties index bb7a28b..03e3b33 100644 --- a/properties/service_flow_config.properties +++ b/properties/service_flow_config.properties @@ -4,7 +4,7 @@ input.kafka.servers=10.3.60.3:9094 #管理输出kafka地址 -output.kafka.servers=10.3.45.126:6667,10.3.45.127:6667,10.3.45.128:6667 +output.kafka.servers=10.3.60.3:9092 #zookeeper 地址 用于配置log_id zookeeper.servers=10.3.60.3:2181 @@ -12,33 +12,31 @@ zookeeper.servers=10.3.60.3:2181 #hbase zookeeper地址 用于连接HBase hbase.zookeeper.servers=10.3.60.3:2181 -#oos地址 -oos.servers=10.3.45.124:8057 - #--------------------------------HTTP/定位库------------------------------# #定位库地址 -#tools.library=/opt/dat/ tools.library=D:/dingweiku/dat/ #网关的schema位置 -schema.http=http://10.3.60.3:9999/metadata/schema/v1/fields/proxy_event +schema.http=http://10.3.60.3:9999/metadata/schema/v1/fields/security_event #网关APP_ID 获取接口 app.id.http=http://10.3.60.3:9999/open-api/appDicList #--------------------------------Kafka消费组信息------------------------------# -#kafka 接收数据topic -#input.kafka.topic=SESSION-RECORD -input.kafka.topic=PROXY-EVENT - +#oos地址 +oos.servers=10.3.45.124:8057 +#输入kafka +input.kafka.topic=test11 #文件源数据topic -output.kafka.topic=TRAFFIC-FILE-METADATA +output.kafka.topic=test-file-data + +percent.kafka.topic=test + -percent.kafka.topic=PROXY-EVENT #读取topic,存储该spout id的消费offset信息,可通过该拓扑命名;具体存储offset的位置,确定下次读取不重复的数据; -group.id=session-record-log-20211018-A +group.id=flink-test-1 #生产者压缩模式 none or snappy producer.kafka.compression.type=none @@ -49,13 +47,16 @@ producer.ack=1 #--------------------------------topology配置------------------------------# #consumer 并行度 -consumer.parallelism=1 +source.parallelism=10 #转换函数并行度 -transform.parallelism=1 +transform.parallelism=10 + +#kafka producer 并行度 +sink.parallelism=10 #数据中心,取值范围(0-63) -data.center.id.num=0 +data.center.id.num=7 #hbase 更新时间,如填写0则不更新缓存 hbase.tick.tuple.freq.secs=180 @@ -69,4 +70,4 @@ app.tick.tuple.freq.secs=0 mail.default.charset=UTF-8 #0不需要补全原样输出日志,1需要补全 -log.need.complete=1 +log.need.complete=1 \ No newline at end of file diff --git a/src/main/java/com/zdjizhi/bean/FileMeta.java b/src/main/java/com/zdjizhi/bean/FileMeta.java deleted file mode 100644 index e24e0b4..0000000 --- a/src/main/java/com/zdjizhi/bean/FileMeta.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.zdjizhi.bean; - -import com.alibaba.fastjson.JSONArray; - -public class FileMeta { - private long common_log_id; - protected int common_recv_time; - private String common_schema_type; - private JSONArray sourceList; - private int processing_time; - - public long getCommon_log_id() { - return common_log_id; - } - - public void setCommon_log_id(long common_log_id) { - this.common_log_id = common_log_id; - } - - public int getCommon_recv_time() { - return common_recv_time; - } - - public void setCommon_recv_time(int common_recv_time) { - this.common_recv_time = common_recv_time; - } - - public String getCommon_schema_type() { - return common_schema_type; - } - - public void setCommon_schema_type(String common_schema_type) { - this.common_schema_type = common_schema_type; - } - - public JSONArray getSourceList() { - return sourceList; - } - - public void setSourceList(JSONArray sourceList) { - this.sourceList = sourceList; - } - - public int getProcessing_time() { - return processing_time; - } - - public void setProcessing_time(int processing_time) { - this.processing_time = processing_time; - } -} diff --git a/src/main/java/com/zdjizhi/bean/SourceList.java b/src/main/java/com/zdjizhi/bean/SourceList.java deleted file mode 100644 index 8fba85d..0000000 --- a/src/main/java/com/zdjizhi/bean/SourceList.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.zdjizhi.bean; - -public class SourceList { - private String destination_oss_path; - private String source_oss_path; - - public String getDestination_oss_path() { - return destination_oss_path; - } - - public void setDestination_oss_path(String destination_oss_path) { - this.destination_oss_path = destination_oss_path; - } - - public String getSource_oss_path() { - return source_oss_path; - } - - public void setSource_oss_path(String source_oss_path) { - this.source_oss_path = source_oss_path; - } -} diff --git a/src/main/java/com/zdjizhi/common/FlowWriteConfig.java b/src/main/java/com/zdjizhi/common/FlowWriteConfig.java deleted file mode 100644 index f821dc2..0000000 --- a/src/main/java/com/zdjizhi/common/FlowWriteConfig.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.zdjizhi.common; - - -import com.zdjizhi.utils.system.FlowWriteConfigurations; - -/** - * @author Administrator - */ -public class FlowWriteConfig { - - public static final int IF_PARAM_LENGTH = 3; - public static final String VISIBILITY = "disabled"; - public static final String FORMAT_SPLITTER = ","; - public static final String IS_JSON_KEY_TAG = "$."; - public static final String IF_CONDITION_SPLITTER = "="; - public static final String MODEL = "remote"; - public static final String PROTOCOL_SPLITTER = "\\."; - - /** - * System config - */ - public static final Integer CONSUMER_PARALLELISM = FlowWriteConfigurations.getIntProperty(0, "consumer.parallelism"); - public static final Integer TRANSFORM_PARALLELISM = FlowWriteConfigurations.getIntProperty(0, "transform.parallelism"); - public static final Integer HBASE_TICK_TUPLE_FREQ_SECS = FlowWriteConfigurations.getIntProperty(0, "hbase.tick.tuple.freq.secs"); - public static final Integer APP_TICK_TUPLE_FREQ_SECS = FlowWriteConfigurations.getIntProperty(0, "app.tick.tuple.freq.secs"); - public static final Integer DATA_CENTER_ID_NUM = FlowWriteConfigurations.getIntProperty(0, "data.center.id.num"); - public static final Integer LOG_NEED_COMPLETE = FlowWriteConfigurations.getIntProperty(0, "log.need.complete"); - public static final String MAIL_DEFAULT_CHARSET = FlowWriteConfigurations.getStringProperty(0, "mail.default.charset"); - public static final String HBASE_TABLE_NAME = FlowWriteConfigurations.getStringProperty(1, "hbase.table.name"); - - /** - * kafka source config - */ - public static final String SESSION_TIMEOUT_MS = FlowWriteConfigurations.getStringProperty(1, "session.timeout.ms"); - public static final String MAX_POLL_RECORDS = FlowWriteConfigurations.getStringProperty(1, "max.poll.records"); - public static final String MAX_PARTITION_FETCH_BYTES = FlowWriteConfigurations.getStringProperty(1, "max.partition.fetch.bytes"); - - - /** - * kafka sink config - */ - public static final String INPUT_KAFKA_SERVERS = FlowWriteConfigurations.getStringProperty(0, "input.kafka.servers"); - public static final String OUTPUT_KAFKA_SERVERS = FlowWriteConfigurations.getStringProperty(0, "output.kafka.servers"); - public static final String ZOOKEEPER_SERVERS = FlowWriteConfigurations.getStringProperty(0, "zookeeper.servers"); - public static final String HBASE_ZOOKEEPER_SERVERS = FlowWriteConfigurations.getStringProperty(0, "hbase.zookeeper.servers"); - public static final String GROUP_ID = FlowWriteConfigurations.getStringProperty(0, "group.id"); - public static final String OUTPUT_KAFKA_TOPIC = FlowWriteConfigurations.getStringProperty(0, "output.kafka.topic"); - public static final String INPUT_KAFKA_TOPIC = FlowWriteConfigurations.getStringProperty(0, "input.kafka.topic"); - public static final String PRODUCER_ACK = FlowWriteConfigurations.getStringProperty(0, "producer.ack"); - public static final String TOOLS_LIBRARY = FlowWriteConfigurations.getStringProperty(0, "tools.library"); - public static final String PRODUCER_KAFKA_COMPRESSION_TYPE = FlowWriteConfigurations.getStringProperty(0, "producer.kafka.compression.type"); - public static final String KAFKA_SOURCE_PROTOCOL = FlowWriteConfigurations.getStringProperty(1, "kafka.source.protocol"); - public static final String KAFKA_SINK_PROTOCOL = FlowWriteConfigurations.getStringProperty(1, "kafka.sink.protocol"); - public static final String KAFKA_USER = FlowWriteConfigurations.getStringProperty(1, "kafka.user"); - public static final String KAFKA_PIN = FlowWriteConfigurations.getStringProperty(1, "kafka.pin"); - - - public static final String PERCENT_KAFKA_TOPIC = FlowWriteConfigurations.getStringProperty(0, "percent.kafka.topic"); - - /** - * connection kafka - */ - public static final String RETRIES = FlowWriteConfigurations.getStringProperty(1, "retries"); - public static final String LINGER_MS = FlowWriteConfigurations.getStringProperty(1, "linger.ms"); - public static final Integer REQUEST_TIMEOUT_MS = FlowWriteConfigurations.getIntProperty(1, "request.timeout.ms"); - public static final Integer BATCH_SIZE = FlowWriteConfigurations.getIntProperty(1, "batch.size"); - public static final Integer BUFFER_MEMORY = FlowWriteConfigurations.getIntProperty(1, "buffer.memory"); - public static final Integer MAX_REQUEST_SIZE = FlowWriteConfigurations.getIntProperty(1, "max.request.size"); - - /** - * http - */ - public static final String SCHEMA_HTTP = FlowWriteConfigurations.getStringProperty(0, "schema.http"); - public static final String APP_ID_HTTP = FlowWriteConfigurations.getStringProperty(0, "app.id.http"); - - - /** - * oos - */ - public static final String OOS_SERVERS = FlowWriteConfigurations.getStringProperty(0, "oos.servers"); - - -} \ No newline at end of file diff --git a/src/main/java/com/zdjizhi/topology/LogFlowWriteTopology.java b/src/main/java/com/zdjizhi/topology/LogFlowWriteTopology.java deleted file mode 100644 index 0a27325..0000000 --- a/src/main/java/com/zdjizhi/topology/LogFlowWriteTopology.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.zdjizhi.topology; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.functions.DealFileProcessFunction; -import com.zdjizhi.utils.functions.FilterNullFunction; -import com.zdjizhi.utils.functions.MapCompletedFunction; -import com.zdjizhi.utils.kafka.Consumer; -import com.zdjizhi.utils.kafka.Producer; -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; - - -/** - * @author qidaijie - * @Package com.zdjizhi.topology - * @Description: - * @date 2021/5/2016:42 - */ -public class LogFlowWriteTopology { - private static final Log logger = LogFactory.get(); - - public static void main(String[] args) { - final StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment(); - -// 开启Checkpoint,interval用于指定checkpoint的触发间隔(单位milliseconds) -// environment.enableCheckpointing(5000); -// - DataStreamSource streamSource = environment.addSource(Consumer.getKafkaConsumer()) - .setParallelism(FlowWriteConfig.CONSUMER_PARALLELISM); -// DataStreamSource streamSource = environment.readTextFile("D:\\flinkdata\\security.log", "utf-8"); - - if (FlowWriteConfig.LOG_NEED_COMPLETE == 1) { - //对原始日志进行处理补全转换等 - DataStream cleaningLog = streamSource.map(new MapCompletedFunction()).name("TransFormLogs") - .setParallelism(FlowWriteConfig.TRANSFORM_PARALLELISM); - //过滤空数据不发送到Kafka内 - DataStream result = cleaningLog.filter(new FilterNullFunction()).name("FilterAbnormalData") - .setParallelism(FlowWriteConfig.TRANSFORM_PARALLELISM); - - //处理带有非结构化日志的数据 - SingleOutputStreamOperator process = result.process(new DealFileProcessFunction()); - - //文件元数据发送至TRAFFIC-FILE-METADATA - process.getSideOutput(DealFileProcessFunction.metaToKafa).addSink(Producer.getKafkaProducer()).name("toTrafficFileMeta") - .setParallelism(FlowWriteConfig.TRANSFORM_PARALLELISM); - - -// //补全后的数据发送给百分点的kafka - process.addSink(Producer.getPercentKafkaProducer()).name("toPercentKafka") - .setParallelism(FlowWriteConfig.TRANSFORM_PARALLELISM); - - } else { - //过滤空数据不发送到Kafka内 - DataStream result = streamSource.filter(new FilterNullFunction()).name("FilterOriginalData") - .setParallelism(FlowWriteConfig.TRANSFORM_PARALLELISM); - //发送数据到Kafka - result.addSink(Producer.getPercentKafkaProducer()).name("LogSinkKafka") - .setParallelism(FlowWriteConfig.TRANSFORM_PARALLELISM); - } - - try { - environment.execute(args[0]); - } catch (Exception e) { - logger.error("This Flink task start ERROR! Exception information is :" + e); - e.printStackTrace(); - } - - } - - -} diff --git a/src/main/java/com/zdjizhi/utils/app/AppUtils.java b/src/main/java/com/zdjizhi/utils/app/AppUtils.java deleted file mode 100644 index 0caeb25..0000000 --- a/src/main/java/com/zdjizhi/utils/app/AppUtils.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.zdjizhi.utils.app; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.StringUtil; -import com.zdjizhi.utils.http.HttpClientUtil; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -/** - * AppId 工具类 - * - * @author qidaijie - */ - -public class AppUtils { - private static final Log logger = LogFactory.get(); - private static Map appIdMap = new ConcurrentHashMap<>(128); - private static AppUtils appUtils; - - private static void getAppInstance() { - appUtils = new AppUtils(); - } - - - /** - * 构造函数-新 - */ - private AppUtils() { - //定时更新 - updateAppIdCache(); - } - - /** - * 更新变量 - */ - private static void change() { - if (appUtils == null) { - getAppInstance(); - } - timestampsFilter(); - } - - - /** - * 获取变更内容 - */ - private static void timestampsFilter() { - try { - Long begin = System.currentTimeMillis(); - String schema = HttpClientUtil.requestByGetMethod(FlowWriteConfig.APP_ID_HTTP); - if (StringUtil.isNotBlank(schema)) { - String data = JSONObject.parseObject(schema).getString("data"); - JSONArray objects = JSONArray.parseArray(data); - for (Object object : objects) { - JSONArray jsonArray = JSONArray.parseArray(object.toString()); - int key = jsonArray.getInteger(0); - String value = jsonArray.getString(1); - if (appIdMap.containsKey(key)) { - if (!value.equals(appIdMap.get(key))) { - appIdMap.put(key, value); - } - } else { - appIdMap.put(key, value); - } - } - logger.warn("Updating the correspondence takes time:" + (begin - System.currentTimeMillis())); - logger.warn("Pull the length of the interface data:[" + objects.size() + "]"); - } - } catch (RuntimeException e) { - logger.error("Update cache app-id failed, exception:" + e); - } - } - - - /** - * 验证定时器,每隔一段时间验证一次-验证获取新的Cookie - */ - private void updateAppIdCache() { - ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1); - executorService.scheduleAtFixedRate(new Runnable() { - @Override - public void run() { - try { - if (FlowWriteConfig.APP_TICK_TUPLE_FREQ_SECS != 0) { - change(); - } - } catch (RuntimeException e) { - logger.error("AppUtils update AppCache is error===>{" + e + "}<==="); - } - } - }, 1, FlowWriteConfig.APP_TICK_TUPLE_FREQ_SECS, TimeUnit.SECONDS); - } - - - /** - * 获取 appName - * - * @param appId app_id - * @return account - */ - public static String getAppName(int appId) { - - if (appUtils == null) { - getAppInstance(); - } - - if (appIdMap.containsKey(appId)) { - return appIdMap.get(appId); - } else { - logger.warn("AppMap get appName is null, ID is :" + appId); - return ""; - } - } - -} diff --git a/src/main/java/com/zdjizhi/utils/exception/FlowWriteException.java b/src/main/java/com/zdjizhi/utils/exception/FlowWriteException.java deleted file mode 100644 index 67c88f0..0000000 --- a/src/main/java/com/zdjizhi/utils/exception/FlowWriteException.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.zdjizhi.utils.exception; - -/** - * @author qidaijie - * @Package com.zdjizhi.storm.utils.execption - * @Description: - * @date 2021/3/259:42 - */ -public class FlowWriteException extends RuntimeException { - - public FlowWriteException() { - } - - public FlowWriteException(String message) { - super(message); - } - -} diff --git a/src/main/java/com/zdjizhi/utils/functions/DealFileProcessFunction.java b/src/main/java/com/zdjizhi/utils/functions/DealFileProcessFunction.java deleted file mode 100644 index 20cb1bb..0000000 --- a/src/main/java/com/zdjizhi/utils/functions/DealFileProcessFunction.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.zdjizhi.utils.functions; - - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.zdjizhi.bean.FileMeta; - - -import com.zdjizhi.bean.SourceList; -import com.zdjizhi.utils.JsonMapper; -import com.zdjizhi.utils.StringUtil; -import com.zdjizhi.utils.general.FileEdit; -import com.zdjizhi.utils.json.JsonTypeUtils; -import org.apache.flink.streaming.api.functions.ProcessFunction; -import org.apache.flink.util.Collector; -import org.apache.flink.util.OutputTag; - -import java.util.Map; - - -/** - * @author wangchengcheng - * @Package com.zdjizhi.utils.functions - * @Description: - * @date 2021/10/14 - */ -public class DealFileProcessFunction extends ProcessFunction { - private static final Log logger = LogFactory.get(); - - private Map jsonMap = null; - private String rpUrlValue; - private String rqUrlValue; - private String emailUrlValue; - - private long cfgId = 0; //= common_policy_id; - - private String sIp = null; // = common_client_ip; - private int sPort = 0;// = common_client_port; - private String dIp = null;//= common_server_ip; - private int dPort = 0;// = common_server_port; - private long foundTime = 0;// = common_recv_time; - private String account = null; - private String domain = null; - private String schemaType = null; - - - //初始化侧输流的标记 - public static OutputTag metaToKafa = new OutputTag("metaToKafka") {}; - - @SuppressWarnings("unchecked") - @Override - public void processElement(String message, Context context, Collector collector) throws Exception { - try { - if (StringUtil.isNotBlank(message)) { - Map map = (Map) JsonMapper.fromJsonString(message, Map.class); - jsonMap = JsonTypeUtils.typeTransform(map); - rpUrlValue = (String) jsonMap.get("http_response_body"); - rqUrlValue = (String) jsonMap.get("http_request_body"); - emailUrlValue = (String) jsonMap.get("mail_eml_file"); - - if (StringUtil.isNotBlank(rpUrlValue) || StringUtil.isNotBlank(rqUrlValue) || StringUtil.isNotBlank(emailUrlValue)) { - cfgId = (long) jsonMap.get("common_policy_id"); - sIp = (String) jsonMap.get("common_client_ip"); - sPort = (int) jsonMap.get("common_client_port"); - dIp = (String) jsonMap.get("common_server_ip"); - dPort = (int) jsonMap.get("common_server_port"); - foundTime = (long) jsonMap.get("common_recv_time"); - schemaType = (String) jsonMap.get("common_schema_type"); - - if (StringUtil.isNotBlank((String) jsonMap.get("http_domain"))) { - domain = jsonMap.get("http_domain").toString(); - } else { - domain = "NA"; - } - if (StringUtil.isNotBlank((String) jsonMap.get("common_subscribe_id"))) { - account = jsonMap.get("common_subscribe_id").toString(); - } else { - account = "NA"; - } - - FileMeta fileMeta = new FileMeta(); - JSONArray jsonarray = new JSONArray(); - if (StringUtil.isNotBlank(rqUrlValue)) { - jsonMap.put("http_request_body", FileEdit.dealFileUrlToPercent(cfgId, sIp, sPort, dIp, dPort, foundTime, account, domain, rqUrlValue, schemaType, "_1")); - SourceList request = new SourceList(); - request.setSource_oss_path(rqUrlValue); - request.setDestination_oss_path(FileEdit.dealFileUrlToPercent(cfgId, sIp, sPort, dIp, dPort, foundTime, account, domain, rqUrlValue, schemaType, "_1")); - jsonarray.add(request); - } - if (StringUtil.isNotBlank(rpUrlValue)) { - jsonMap.put("http_response_body", FileEdit.dealFileUrlToPercent(cfgId, sIp, sPort, dIp, dPort, foundTime, account, domain, rpUrlValue, schemaType, "_2")); - SourceList response = new SourceList(); - response.setSource_oss_path(rpUrlValue); - response.setDestination_oss_path(FileEdit.dealFileUrlToPercent(cfgId, sIp, sPort, dIp, dPort, foundTime, account, domain, rpUrlValue, schemaType, "_2")); - jsonarray.add(response); - } - if (StringUtil.isNotBlank(emailUrlValue)) { - jsonMap.put("mail_eml_file", FileEdit.dealFileUrlToPercent(cfgId, sIp, sPort, dIp, dPort, foundTime, account, domain, emailUrlValue, schemaType, "_9")); - SourceList emailFile = new SourceList(); - emailFile.setSource_oss_path(emailUrlValue); - emailFile.setDestination_oss_path(FileEdit.dealFileUrlToPercent(cfgId, sIp, sPort, dIp, dPort, foundTime, account, domain, emailUrlValue, schemaType, "_9")); - jsonarray.add(emailFile); - } - fileMeta.setSourceList(jsonarray); - fileMeta.setCommon_log_id((long) jsonMap.get("common_log_id")); - fileMeta.setCommon_recv_time(Integer.parseInt(jsonMap.get("common_recv_time").toString())); - fileMeta.setCommon_schema_type((String) jsonMap.get("common_schema_type")); - fileMeta.setProcessing_time((int) (System.currentTimeMillis() / 1000)); - - context.output(metaToKafa, JSONObject.toJSONString(fileMeta)); - } - collector.collect(JsonMapper.toJsonString(jsonMap)); - } else { - collector.collect(message); - } - }catch (RuntimeException e) { - logger.error("处理带有非结构结构化字段的日志出错:" + e + "\n" + message); - - } - } - } diff --git a/src/main/java/com/zdjizhi/utils/functions/FilterNullFunction.java b/src/main/java/com/zdjizhi/utils/functions/FilterNullFunction.java deleted file mode 100644 index de507ad..0000000 --- a/src/main/java/com/zdjizhi/utils/functions/FilterNullFunction.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.zdjizhi.utils.functions; - -import com.zdjizhi.utils.StringUtil; -import org.apache.flink.api.common.functions.FilterFunction; - -/** - * @author qidaijie - * @Package com.zdjizhi.utils.functions - * @Description: - * @date 2021/5/2715:01 - */ -public class FilterNullFunction implements FilterFunction { - @Override - public boolean filter(String message) { - return StringUtil.isNotBlank(message); - } -} diff --git a/src/main/java/com/zdjizhi/utils/functions/MapCompletedFunction.java b/src/main/java/com/zdjizhi/utils/functions/MapCompletedFunction.java deleted file mode 100644 index 5618159..0000000 --- a/src/main/java/com/zdjizhi/utils/functions/MapCompletedFunction.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.zdjizhi.utils.functions; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.zdjizhi.utils.general.TransFormTypeMap; -import org.apache.flink.api.common.functions.MapFunction; - - -/** - * @author qidaijie - * @Package com.zdjizhi.utils.functions - * @Description: - * @date 2021/5/2715:01 - */ -public class MapCompletedFunction implements MapFunction { - private static final Log logger = LogFactory.get(); - - @Override - @SuppressWarnings("unchecked") - public String map(String logs) { - try { - return TransFormTypeMap.dealCommonMessage(logs); - } catch (RuntimeException e) { - logger.error("解析补全日志信息过程异常,异常信息:" + e + "\n" + logs); - return ""; - } - } -} diff --git a/src/main/java/com/zdjizhi/utils/general/FileEdit.java b/src/main/java/com/zdjizhi/utils/general/FileEdit.java deleted file mode 100644 index 091f368..0000000 --- a/src/main/java/com/zdjizhi/utils/general/FileEdit.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.zdjizhi.utils.general; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.ordinary.MD5Utils; - - -/** - * 文件字段操作工具 - */ -public class FileEdit { - - private static final Log logger = LogFactory.get(); - - - public static String dealFileUrlToPercent(long cfgId,String sIp,int sPort,String dIp,int dPort,long foundTime,String account,String domain, String urlValue,String schemaType,String fileSuffix) throws Exception { - String fileType = null; - if (schemaType.equals("HTTP")){ - fileType = "html"; - } - if (schemaType.equals("MAIL")){ - fileType = "eml"; - } - return "http://"+ FlowWriteConfig.OOS_SERVERS+"/upload_v2"+"/"+cfgId+"/"+fileType+"/"+sIp+"/"+sPort+"/"+dIp+"/"+dPort+"/"+foundTime+"/"+account+"/"+domain+"/"+getFileName(urlValue,fileSuffix); - } - - public static String getFileType(String url){ - String[] split = url.split("\\."); - return split[split.length-1]; - } - - public static String getFileName(String url,String fileSuffix) throws Exception { - String[] arr = url.split("/"); - String filename = arr[arr.length-1].substring(0,arr[arr.length-1].lastIndexOf("_")); - String prefix = MD5Utils.md5Encode(filename); -// String suffix = arr[arr.length-1].substring(arr[arr.length-1].lastIndexOf("_"),arr[arr.length-1].lastIndexOf(".")); - return prefix+fileSuffix; - } -} diff --git a/src/main/java/com/zdjizhi/utils/general/SnowflakeId.java b/src/main/java/com/zdjizhi/utils/general/SnowflakeId.java deleted file mode 100644 index 168fec2..0000000 --- a/src/main/java/com/zdjizhi/utils/general/SnowflakeId.java +++ /dev/null @@ -1,213 +0,0 @@ -package com.zdjizhi.utils.general; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.zookeeper.DistributedLock; -import com.zdjizhi.utils.zookeeper.ZookeeperUtils; - -/** - * 雪花算法 - * - * @author qidaijie - */ -public class SnowflakeId { - private static final Log logger = LogFactory.get(); - - /** - * 共64位 第一位为符号位 默认0 - * 时间戳 39位(17 year), centerId:(关联每个环境或任务数) :6位(0-63), - * workerId(关联进程):7(0-127) ,序列号:11位(2047/ms) - * - * 序列号 /ms = (-1L ^ (-1L << 11)) - * 最大使用年 = (1L << 39) / (1000L * 60 * 60 * 24 * 365) - */ - /** - * 开始时间截 (2020-11-14 00:00:00) max 17years - */ - private final long twepoch = 1605283200000L; - - /** - * 机器id所占的位数 - */ - private final long workerIdBits = 8L; - - /** - * 数据标识id所占的位数 - */ - private final long dataCenterIdBits = 5L; - - /** - * 支持的最大机器id,结果是63 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) - * M << n = M * 2^n - */ - private final long maxWorkerId = -1L ^ (-1L << workerIdBits); - - /** - * 支持的最大数据标识id,结果是127 - */ - private final long maxDataCenterId = -1L ^ (-1L << dataCenterIdBits); - - /** - * 序列在id中占的位数 - */ - private final long sequenceBits = 11L; - - /** - * 机器ID向左移12位 - */ - private final long workerIdShift = sequenceBits; - - /** - * 数据标识id向左移17位(14+6) - */ - private final long dataCenterIdShift = sequenceBits + workerIdBits; - - /** - * 时间截向左移22位(4+6+14) - */ - private final long timestampLeftShift = sequenceBits + workerIdBits + dataCenterIdBits; - - /** - * 生成序列的掩码,这里为2047 - */ - private final long sequenceMask = -1L ^ (-1L << sequenceBits); - - /** - * 工作机器ID(0~255) - */ - private long workerId; - - /** - * 数据中心ID(0~31) - */ - private long dataCenterId; - - /** - * 毫秒内序列(0~2047) - */ - private long sequence = 0L; - - /** - * 上次生成ID的时间截 - */ - private long lastTimestamp = -1L; - - - /** - * 设置允许时间回拨的最大限制10s - */ - private static final long rollBackTime = 10000L; - - - private static SnowflakeId idWorker; - - private static ZookeeperUtils zookeeperUtils = new ZookeeperUtils(); - - static { - idWorker = new SnowflakeId(FlowWriteConfig.ZOOKEEPER_SERVERS, FlowWriteConfig.DATA_CENTER_ID_NUM); - } - - //==============================Constructors===================================== - - /** - * 构造函数 - */ - private SnowflakeId(String zookeeperIp, long dataCenterIdNum) { - DistributedLock lock = new DistributedLock(FlowWriteConfig.ZOOKEEPER_SERVERS, "disLocks1"); - try { - lock.lock(); - int tmpWorkerId = zookeeperUtils.modifyNode("/Snowflake/" + "worker" + dataCenterIdNum, zookeeperIp); - if (tmpWorkerId > maxWorkerId || tmpWorkerId < 0) { - throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); - } - if (dataCenterIdNum > maxDataCenterId || dataCenterIdNum < 0) { - throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than ", maxDataCenterId)); - } - this.workerId = tmpWorkerId; - this.dataCenterId = dataCenterIdNum; - } catch (RuntimeException e) { - logger.error("This is not usual error!!!===>>>" + e + "<<<==="); - }finally { - lock.unlock(); - } - } - - // ==============================Methods========================================== - - /** - * 获得下一个ID (该方法是线程安全的) - * - * @return SnowflakeId - */ - private synchronized long nextId() { - long timestamp = timeGen(); - //设置一个允许回拨限制时间,系统时间回拨范围在rollBackTime内可以等待校准 - if (lastTimestamp - timestamp > 0 && lastTimestamp - timestamp < rollBackTime) { - timestamp = tilNextMillis(lastTimestamp); - } - //如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常 - if (timestamp < lastTimestamp) { - throw new RuntimeException( - String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); - } - - //如果是同一时间生成的,则进行毫秒内序列 - if (lastTimestamp == timestamp) { - sequence = (sequence + 1) & sequenceMask; - //毫秒内序列溢出 - if (sequence == 0) { - //阻塞到下一个毫秒,获得新的时间戳 - timestamp = tilNextMillis(lastTimestamp); - } - } - //时间戳改变,毫秒内序列重置 - else { - sequence = 0L; - } - - //上次生成ID的时间截 - lastTimestamp = timestamp; - - //移位并通过或运算拼到一起组成64位的ID - return ((timestamp - twepoch) << timestampLeftShift) - | (dataCenterId << dataCenterIdShift) - | (workerId << workerIdShift) - | sequence; - } - - /** - * 阻塞到下一个毫秒,直到获得新的时间戳 - * - * @param lastTimestamp 上次生成ID的时间截 - * @return 当前时间戳 - */ - protected long tilNextMillis(long lastTimestamp) { - long timestamp = timeGen(); - while (timestamp <= lastTimestamp) { - timestamp = timeGen(); - } - return timestamp; - } - - /** - * 返回以毫秒为单位的当前时间 - * - * @return 当前时间(毫秒) - */ - protected long timeGen() { - return System.currentTimeMillis(); - } - - - /** - * 静态工具类 - * - * @return - */ - public static Long generateId() { - return idWorker.nextId(); - } - - -} \ No newline at end of file diff --git a/src/main/java/com/zdjizhi/utils/general/TransFormMap.java b/src/main/java/com/zdjizhi/utils/general/TransFormMap.java deleted file mode 100644 index 549d1d4..0000000 --- a/src/main/java/com/zdjizhi/utils/general/TransFormMap.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.zdjizhi.utils.general; - - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.JsonMapper; -import com.zdjizhi.utils.StringUtil; -import com.zdjizhi.utils.json.JsonParseUtil; -import com.zdjizhi.utils.json.JsonTypeUtils; - -import java.util.ArrayList; -import java.util.Map; - - -/** - * 描述:转换或补全工具类 - * - * @author qidaijie - */ -public class TransFormMap { - private static final Log logger = LogFactory.get(); - - /** - * 获取任务列表 - * list的每个元素是一个四元字符串数组 (有format标识的字段,补全的字段,用到的功能函数,用到的参数),例如: - * (mail_subject mail_subject decode_of_base64 mail_subject_charset) - */ - private static ArrayList jobList = JsonParseUtil.getJobListFromHttp(FlowWriteConfig.SCHEMA_HTTP); - - /** - * 解析日志,并补全 - * - * @param message kafka Topic原始日志 - * @return 补全后的日志 - */ - @SuppressWarnings("unchecked") - public static String dealCommonMessage(String message) { - try { - if (StringUtil.isNotBlank(message)) { - - Map jsonMap = (Map) JsonMapper.fromJsonString(message, Map.class); - for (String[] strings : jobList) { - //用到的参数的值 - Object logValue = JsonParseUtil.getValue(jsonMap, strings[0]); - //需要补全的字段的key - String appendToKeyName = strings[1]; - //需要补全的字段的值 - Object appendTo = JsonParseUtil.getValue(jsonMap, appendToKeyName); - //匹配操作函数的字段 - String function = strings[2]; - //额外的参数的值 - String param = strings[3]; - functionSet(function, jsonMap, appendToKeyName, appendTo, logValue, param); - } - return JsonMapper.toJsonString(jsonMap); - } else { - return ""; - } - } catch (RuntimeException e) { - logger.error("解析补全日志信息过程异常,异常信息:" + e + "\n" + message); - return ""; - } - } - - - /** - * 根据schema描述对应字段进行操作的 函数集合 - * - * @param function 匹配操作函数的字段 - * @param jsonMap 原始日志解析map - * @param appendToKeyName 需要补全的字段的key - * @param appendTo 需要补全的字段的值 - * @param logValue 用到的参数的值 - * @param param 额外的参数的值 - */ - private static void functionSet(String function, Map jsonMap, String appendToKeyName, Object appendTo, Object logValue, String param) { - switch (function) { - case "current_timestamp": - if (!(appendTo instanceof Long)) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.getCurrentTime()); - } - break; - case "snowflake_id": - JsonParseUtil.setValue(jsonMap, appendToKeyName, SnowflakeId.generateId()); - break; - case "geo_ip_detail": - if (logValue != null && appendTo == null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.getGeoIpDetail(logValue.toString())); - } - break; - case "geo_asn": - if (logValue != null && appendTo == null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.getGeoAsn(logValue.toString())); - } - break; - case "geo_ip_country": - if (logValue != null && appendTo == null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.getGeoIpCountry(logValue.toString())); - } - break; - case "set_value": - if (param != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, param); - } - break; - case "get_value": - if (logValue != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, logValue); - } - break; - case "if": - if (param != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.condition(jsonMap, param)); - } - break; - case "sub_domain": - if (appendTo == null && logValue != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.getTopDomain(logValue.toString())); - } - break; - case "radius_match": - if (logValue != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.radiusMatch(logValue.toString())); - } - break; - case "app_match": - if (logValue != null && appendTo == null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.appMatch(logValue.toString())); - } - break; - case "decode_of_base64": - if (logValue != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.decodeBase64(logValue.toString(), TransFunction.isJsonValue(jsonMap, param))); - } - break; - case "flattenSpec": - if (logValue != null && param != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.flattenSpec(logValue.toString(), param)); - } - break; - default: - } - } - -} \ No newline at end of file diff --git a/src/main/java/com/zdjizhi/utils/general/TransFormObject.java b/src/main/java/com/zdjizhi/utils/general/TransFormObject.java deleted file mode 100644 index 26795b0..0000000 --- a/src/main/java/com/zdjizhi/utils/general/TransFormObject.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.zdjizhi.utils.general; - - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.JsonMapper; -import com.zdjizhi.utils.StringUtil; -import com.zdjizhi.utils.json.JsonParseUtil; - -import java.util.ArrayList; -import java.util.HashMap; - - -/** - * 描述:转换或补全工具类 - * - * @author qidaijie - */ -public class TransFormObject { - private static final Log logger = LogFactory.get(); - - /** - * 在内存中加载反射类用的map - */ - private static HashMap map = JsonParseUtil.getMapFromHttp(FlowWriteConfig.SCHEMA_HTTP); - - /** - * 反射成一个类 - */ - private static Object mapObject = JsonParseUtil.generateObject(map); - - /** - * 获取任务列表 - * list的每个元素是一个四元字符串数组 (有format标识的字段,补全的字段,用到的功能函数,用到的参数),例如: - * (mail_subject mail_subject decode_of_base64 mail_subject_charset) - */ - private static ArrayList jobList = JsonParseUtil.getJobListFromHttp(FlowWriteConfig.SCHEMA_HTTP); - - /** - * 解析日志,并补全 - * - * @param message kafka Topic原始日志 - * @return 补全后的日志 - */ - public static String dealCommonMessage(String message) { - try { - if (StringUtil.isNotBlank(message)) { - Object object = JsonMapper.fromJsonString(message, mapObject.getClass()); - for (String[] strings : jobList) { - //用到的参数的值 - Object name = JsonParseUtil.getValue(object, strings[0]); - //需要补全的字段的key - String appendToKeyName = strings[1]; - //需要补全的字段的值 - Object appendTo = JsonParseUtil.getValue(object, appendToKeyName); - //匹配操作函数的字段 - String function = strings[2]; - //额外的参数的值 - String param = strings[3]; - functionSet(function, object, appendToKeyName, appendTo, name, param); - } - return JsonMapper.toJsonString(object); - } else { - return ""; - } - } catch (RuntimeException e) { - logger.error("解析补全日志信息过程异常,异常信息:" + e + "\n" + message); - return ""; - } - } - - - /** - * 根据schema描述对应字段进行操作的 函数集合 - * - * @param function 匹配操作函数的字段 - * @param object 动态POJO Object - * @param appendToKeyName 需要补全的字段的key - * @param appendTo 需要补全的字段的值 - * @param name 用到的参数的值 - * @param param 额外的参数的值 - */ - private static void functionSet(String function, Object object, String appendToKeyName, Object appendTo, Object name, String param) { - switch (function) { - case "current_timestamp": - if (!(appendTo instanceof Long)) { - JsonParseUtil.setValue(object, appendToKeyName, TransFunction.getCurrentTime()); - } - break; - case "snowflake_id": - JsonParseUtil.setValue(object, appendToKeyName, SnowflakeId.generateId()); - break; - case "geo_ip_detail": - if (name != null && appendTo == null) { - JsonParseUtil.setValue(object, appendToKeyName, TransFunction.getGeoIpDetail(name.toString())); - } - break; - case "geo_asn": - if (name != null && appendTo == null) { - JsonParseUtil.setValue(object, appendToKeyName, TransFunction.getGeoAsn(name.toString())); - } - break; - case "geo_ip_country": - if (name != null && appendTo == null) { - JsonParseUtil.setValue(object, appendToKeyName, TransFunction.getGeoIpCountry(name.toString())); - } - break; - case "set_value": - if (name != null && param != null) { - JsonParseUtil.setValue(object, appendToKeyName, TransFunction.setValue(param)); - } - break; - case "get_value": - if (name != null) { - JsonParseUtil.setValue(object, appendToKeyName, name); - } - break; - case "if": - if (param != null) { - JsonParseUtil.setValue(object, appendToKeyName, TransFunction.condition(object, param)); - } - break; - case "sub_domain": - if (appendTo == null && name != null) { - JsonParseUtil.setValue(object, appendToKeyName, TransFunction.getTopDomain(name.toString())); - } - break; - case "radius_match": - if (name != null) { - JsonParseUtil.setValue(object, appendToKeyName, TransFunction.radiusMatch(name.toString())); - } - break; - case "app_match": - if (name != null && appendTo == null) { - JsonParseUtil.setValue(object, appendToKeyName, TransFunction.appMatch(name.toString())); - } - break; - case "decode_of_base64": - if (name != null) { - JsonParseUtil.setValue(object, appendToKeyName, TransFunction.decodeBase64(name.toString(), TransFunction.isJsonValue(object, param))); - } - break; - case "flattenSpec": - if (name != null && param != null) { - JsonParseUtil.setValue(object, appendToKeyName, TransFunction.flattenSpec(name.toString(), param)); - } - break; - default: - } - } - -} \ No newline at end of file diff --git a/src/main/java/com/zdjizhi/utils/general/TransFormTypeMap.java b/src/main/java/com/zdjizhi/utils/general/TransFormTypeMap.java deleted file mode 100644 index 4423f51..0000000 --- a/src/main/java/com/zdjizhi/utils/general/TransFormTypeMap.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.zdjizhi.utils.general; - - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.JsonMapper; -import com.zdjizhi.utils.StringUtil; -import com.zdjizhi.utils.json.JsonParseUtil; -import com.zdjizhi.utils.json.JsonTypeUtils; - -import java.util.ArrayList; -import java.util.Map; - - -/** - * 描述:转换或补全工具类 - * - * @author qidaijie - */ -public class TransFormTypeMap { - private static final Log logger = LogFactory.get(); - - /** - * 获取任务列表 - * list的每个元素是一个四元字符串数组 (有format标识的字段,补全的字段,用到的功能函数,用到的参数),例如: - * (mail_subject mail_subject decode_of_base64 mail_subject_charset) - */ - private static ArrayList jobList = JsonParseUtil.getJobListFromHttp(FlowWriteConfig.SCHEMA_HTTP); - - /** - * 解析日志,并补全 - * - * @param message kafka Topic原始日志 - * @return 补全后的日志 - */ - @SuppressWarnings("unchecked") - public static String dealCommonMessage(String message) { - try { - if (StringUtil.isNotBlank(message)) { - Map map = (Map) JsonMapper.fromJsonString(message, Map.class); - Map jsonMap = JsonTypeUtils.typeTransform(map); - for (String[] strings : jobList) { - //用到的参数的值 - Object logValue = JsonParseUtil.getValue(jsonMap, strings[0]); - //需要补全的字段的key - String appendToKeyName = strings[1]; - //需要补全的字段的值 - Object appendToKeyValue = JsonParseUtil.getValue(jsonMap, appendToKeyName); - //匹配操作函数的字段 - String function = strings[2]; - //额外的参数的值 - String param = strings[3]; - functionSet(function, jsonMap, appendToKeyName, appendToKeyValue, logValue, param); - } - return JsonMapper.toJsonString(jsonMap); - } else { - return ""; - } - } catch (RuntimeException e) { - logger.error("解析补全日志信息过程异常,异常信息:" + e + "\n" + message); - return ""; - } - } - - - /** - * 根据schema描述对应字段进行操作的 函数集合 - * - * @param function 匹配操作函数的字段 - * @param jsonMap 原始日志解析map - * @param appendToKeyName 需要补全的字段的key - * @param appendToKeyValue 需要补全的字段的值 - * @param logValue 用到的参数的值 - * @param param 额外的参数的值 - */ - private static void functionSet(String function, Map jsonMap, String appendToKeyName, Object appendToKeyValue, Object logValue, String param) { - switch (function) { - case "current_timestamp": - if (!(appendToKeyValue instanceof Long)) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.getCurrentTime()); - } - break; - case "snowflake_id": - JsonParseUtil.setValue(jsonMap, appendToKeyName, SnowflakeId.generateId()); - break; - case "geo_ip_detail": - if (logValue != null && appendToKeyValue == null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.getGeoIpDetail(logValue.toString())); - } - break; - case "geo_asn": - if (logValue != null && appendToKeyValue == null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.getGeoAsn(logValue.toString())); - } - break; - case "geo_ip_country": - if (logValue != null && appendToKeyValue == null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.getGeoIpCountry(logValue.toString())); - } - break; - case "set_value": - if (param != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, param); - } - break; - case "get_value": - if (logValue != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, logValue); - } - break; - case "if": - if (param != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.condition(jsonMap, param)); - } - break; - case "sub_domain": - if (appendToKeyValue == null && logValue != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.getTopDomain(logValue.toString())); - } - break; - case "radius_match": - if (logValue != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.radiusMatch(logValue.toString())); - } - break; - case "app_match": - if (logValue != null && appendToKeyValue == null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.appMatch(logValue.toString())); - } - break; - case "decode_of_base64": - if (logValue != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.decodeBase64(logValue.toString(), TransFunction.isJsonValue(jsonMap, param))); - } - break; - case "flattenSpec": - if (logValue != null && param != null) { - JsonParseUtil.setValue(jsonMap, appendToKeyName, TransFunction.flattenSpec(logValue.toString(), param)); - } - break; - default: - } - } - -} \ No newline at end of file diff --git a/src/main/java/com/zdjizhi/utils/general/TransFunction.java b/src/main/java/com/zdjizhi/utils/general/TransFunction.java deleted file mode 100644 index 7dc806e..0000000 --- a/src/main/java/com/zdjizhi/utils/general/TransFunction.java +++ /dev/null @@ -1,316 +0,0 @@ -package com.zdjizhi.utils.general; - -import cn.hutool.core.codec.Base64; -import cn.hutool.core.text.StrSpliter; -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.jayway.jsonpath.InvalidPathException; -import com.jayway.jsonpath.JsonPath; -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.FormatUtils; -import com.zdjizhi.utils.IpLookup; -import com.zdjizhi.utils.StringUtil; -import com.zdjizhi.utils.app.AppUtils; -import com.zdjizhi.utils.hbase.HBaseUtils; -import com.zdjizhi.utils.json.JsonParseUtil; -import com.zdjizhi.utils.json.TypeUtils; - -import java.util.ArrayList; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * @author qidaijie - */ -class TransFunction { - - private static final Log logger = LogFactory.get(); - - private static final Pattern PATTERN = Pattern.compile("[0-9]*"); - - /** - * IP定位库工具类 - */ - private static IpLookup ipLookup = new IpLookup.Builder(false) - .loadDataFileV4(FlowWriteConfig.TOOLS_LIBRARY + "ip_v4.mmdb") - .loadDataFileV6(FlowWriteConfig.TOOLS_LIBRARY + "ip_v6.mmdb") - .loadDataFilePrivateV4(FlowWriteConfig.TOOLS_LIBRARY + "ip_private_v4.mmdb") - .loadDataFilePrivateV6(FlowWriteConfig.TOOLS_LIBRARY + "ip_private_v6.mmdb") - .loadAsnDataFile(FlowWriteConfig.TOOLS_LIBRARY + "asn_v4.mmdb") - .loadAsnDataFileV6(FlowWriteConfig.TOOLS_LIBRARY + "asn_v6.mmdb") - .build(); - - /** - * 生成当前时间戳的操作 - */ - static long getCurrentTime() { - - return System.currentTimeMillis() / 1000; - } - - /** - * 根据clientIp获取location信息 - * - * @param ip client IP - * @return ip地址详细信息 - */ - static String getGeoIpDetail(String ip) { - - return ipLookup.cityLookupDetail(ip); - - } - - /** - * 根据ip获取asn信息 - * - * @param ip client/server IP - * @return ASN - */ - static String getGeoAsn(String ip) { - - return ipLookup.asnLookup(ip); - } - - /** - * 根据ip获取country信息 - * - * @param ip server IP - * @return 国家 - */ - static String getGeoIpCountry(String ip) { - - return ipLookup.countryLookup(ip); - } - - - /** - * radius借助HBase补齐 - * - * @param ip client IP - * @return account - */ - static String radiusMatch(String ip) { - String account = HBaseUtils.getAccount(ip.trim()); -// if (StringUtil.isBlank(account)) { -// logger.warn("HashMap get account is null, Ip is :" + ip); -// } - return account; - } - - /** - * appId与缓存中对应关系补全appName - * - * @param appIds app id 列表 - * @return appName - */ - static String appMatch(String appIds) { - try { - String appId = StrSpliter.split(appIds, FlowWriteConfig.FORMAT_SPLITTER, true, true).get(0); - return AppUtils.getAppName(Integer.parseInt(appId)); - } catch (NumberFormatException | ClassCastException exception) { - logger.error("APP ID列表分割转换异常,异常APP ID列表:" + appIds); - return ""; - } - } - - /** - * 解析顶级域名 - * - * @param domain 初始域名 - * @return 顶级域名 - */ - static String getTopDomain(String domain) { - try { - return FormatUtils.getTopPrivateDomain(domain); - } catch (StringIndexOutOfBoundsException outException) { - logger.error("解析顶级域名异常,异常域名:" + domain); - return ""; - } - } - - /** - * 根据编码解码base64 - * - * @param message base64 - * @param charset 编码 - * @return 解码字符串 - */ - static String decodeBase64(String message, Object charset) { - String result = ""; - try { - if (StringUtil.isNotBlank(message)) { - if (charset == null) { - result = Base64.decodeStr(message, FlowWriteConfig.MAIL_DEFAULT_CHARSET); - } else { - result = Base64.decodeStr(message, charset.toString()); - } - } - } catch (RuntimeException rune) { - logger.error("解析 Base64 异常,异常信息:" + rune); - } - return result; - } - - /** - * 根据表达式解析json - * - * @param message json - * @param expr 解析表达式 - * @return 解析结果 - */ - static String flattenSpec(String message, String expr) { - String flattenResult = ""; - try { - if (StringUtil.isNotBlank(expr)) { - ArrayList read = JsonPath.parse(message).read(expr); - flattenResult = read.get(0); - } - } catch (ClassCastException | InvalidPathException e) { - logger.error("设备标签解析异常,[ " + expr + " ]解析表达式错误" + e); - } - return flattenResult; - } - - - /** - * 判断是否为日志字段,是则返回对应value,否则返回原始字符串 - * - * @param object 内存实体类 - * @param param 字段名/普通字符串 - * @return JSON.Value or String - */ - static Object isJsonValue(Object object, String param) { - if (param.contains(FlowWriteConfig.IS_JSON_KEY_TAG)) { - return JsonParseUtil.getValue(object, param.substring(2)); - } else { - return param; - } - } - - /** - * 判断是否为日志字段,是则返回对应value,否则返回原始字符串 - * - * @param jsonMap 内存实体类 - * @param param 字段名/普通字符串 - * @return JSON.Value or String - */ - static Object isJsonValue(Map jsonMap, String param) { - if (param.contains(FlowWriteConfig.IS_JSON_KEY_TAG)) { - return JsonParseUtil.getValue(jsonMap, param.substring(2)); - } else { - return param; - } - } - - /** - * IF函数实现,解析日志构建三目运算;包含判断是否为数字若为数字则转换为long类型返回结果。 - * - * @param object 内存实体类 - * @param ifParam 字段名/普通字符串 - * @return resultA or resultB or null - */ - static Object condition(Object object, String ifParam) { - Object result = null; - try { - String[] split = ifParam.split(FlowWriteConfig.FORMAT_SPLITTER); - if (split.length == FlowWriteConfig.IF_PARAM_LENGTH) { - String[] norms = split[0].split(FlowWriteConfig.IF_CONDITION_SPLITTER); - Object direction = isJsonValue(object, norms[0]); - Object resultA = isJsonValue(object, split[1]); - Object resultB = isJsonValue(object, split[2]); - if (direction instanceof Number) { -// result = (Integer.parseInt(direction.toString()) == Integer.parseInt(norms[1])) ? resultA : resultB; - result = TypeUtils.castToIfFunction((Integer.parseInt(direction.toString()) == Integer.parseInt(norms[1])) ? resultA : resultB); - } else if (direction instanceof String) { - result = TypeUtils.castToIfFunction(direction.equals(norms[1]) ? resultA : resultB); -// result = direction.equals(norms[1]) ? resultA : resultB; - } - } - } catch (RuntimeException e) { - logger.error("IF 函数执行异常,异常信息:" + e); - } - return result; - } - - /** - * IF函数实现,解析日志构建三目运算;包含判断是否为数字若为数字则转换为long类型返回结果。 - * - * @param jsonMap 内存实体类 - * @param ifParam 字段名/普通字符串 - * @return resultA or resultB or null - */ - static Object condition(Map jsonMap, String ifParam) { - Object result = null; - try { - String[] split = ifParam.split(FlowWriteConfig.FORMAT_SPLITTER); - if (split.length == FlowWriteConfig.IF_PARAM_LENGTH) { - String[] norms = split[0].split(FlowWriteConfig.IF_CONDITION_SPLITTER); - Object direction = isJsonValue(jsonMap, norms[0]); - Object resultA = isJsonValue(jsonMap, split[1]); - Object resultB = isJsonValue(jsonMap, split[2]); - if (direction instanceof Number) { - result = (Integer.parseInt(direction.toString()) == Integer.parseInt(norms[1])) ? resultA : resultB; -// result = TypeUtils.castToIfFunction((Integer.parseInt(direction.toString()) == Integer.parseInt(norms[1])) ? resultA : resultB); - } else if (direction instanceof String) { -// result = TypeUtils.castToIfFunction(direction.equals(norms[1]) ? resultA : resultB); - result = direction.equals(norms[1]) ? resultA : resultB; - } - } - } catch (RuntimeException e) { - logger.error("IF 函数执行异常,异常信息:" + e); - } - return result; - } - -// /** -// * IF函数实现,解析日志构建三目运算;包含判断是否为数字若为数字则转换为long类型返回结果。 -// * -// * @param jsonMap 原始日志 -// * @param ifParam 字段名/普通字符串 -// * @return resultA or resultB or null -// */ -// static Object condition(Map jsonMap, String ifParam) { -// try { -// String[] split = ifParam.split(FlowWriteConfig.FORMAT_SPLITTER); -// String[] norms = split[0].split(FlowWriteConfig.IF_CONDITION_SPLITTER); -// String direction = isJsonValue(jsonMap, norms[0]); -// if (StringUtil.isNotBlank(direction)) { -// if (split.length == FlowWriteConfig.IF_PARAM_LENGTH) { -// String resultA = isJsonValue(jsonMap, split[1]); -// String resultB = isJsonValue(jsonMap, split[2]); -// String result = (Integer.parseInt(direction) == Integer.parseInt(norms[1])) ? resultA : resultB; -// Matcher isNum = PATTERN.matcher(result); -// if (isNum.matches()) { -// return Long.parseLong(result); -// } else { -// return result; -// } -// } -// } -// } catch (RuntimeException e) { -// logger.error("IF 函数执行异常,异常信息:" + e); -// } -// return null; -// } - - /** - * 设置固定值函数 若为数字则转为long返回 - * - * @param param 默认值 - * @return 返回数字或字符串 - */ - static Object setValue(String param) { - try { - Matcher isNum = PATTERN.matcher(param); - if (isNum.matches()) { - return Long.parseLong(param); - } else { - return param; - } - } catch (RuntimeException e) { - logger.error("SetValue 函数异常,异常信息:" + e); - } - return null; - } -} diff --git a/src/main/java/com/zdjizhi/utils/hbase/HBaseUtils.java b/src/main/java/com/zdjizhi/utils/hbase/HBaseUtils.java deleted file mode 100644 index 710e4b9..0000000 --- a/src/main/java/com/zdjizhi/utils/hbase/HBaseUtils.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.zdjizhi.utils.hbase; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.zdjizhi.common.FlowWriteConfig; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.Cell; -import org.apache.hadoop.hbase.CellUtil; -import org.apache.hadoop.hbase.HBaseConfiguration; -import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.client.*; -import org.apache.hadoop.hbase.util.Bytes; - -import java.io.IOException; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -/** - * HBase 工具类 - * - * @author qidaijie - */ - -public class HBaseUtils { - private static final Log logger = LogFactory.get(); - private static Map subIdMap = new ConcurrentHashMap<>(83334); - private static Connection connection; - private static Long time; - - private static String zookeeperIp; - private static String hBaseTable; - - private static HBaseUtils hBaseUtils; - - private static void getInstance() { - hBaseUtils = new HBaseUtils(); - } - - - /** - * 构造函数-新 - */ - private HBaseUtils() { - zookeeperIp = FlowWriteConfig.HBASE_ZOOKEEPER_SERVERS; - hBaseTable = FlowWriteConfig.HBASE_TABLE_NAME; - //获取连接 - getConnection(); - //拉取所有 - getAll(); - //定时更新 - updateCache(); - } - - private static void getConnection() { - try { - // 管理Hbase的配置信息 - Configuration configuration = HBaseConfiguration.create(); - // 设置zookeeper节点 - configuration.set("hbase.zookeeper.quorum", zookeeperIp); - configuration.set("hbase.client.retries.number", "3"); - configuration.set("hbase.bulkload.retries.number", "3"); - configuration.set("zookeeper.recovery.retry", "3"); - connection = ConnectionFactory.createConnection(configuration); - time = System.currentTimeMillis(); - logger.warn("HBaseUtils get HBase connection,now to getAll()."); - } catch (IOException ioe) { - logger.error("HBaseUtils getHbaseConn() IOException===>{" + ioe + "}<==="); - } catch (RuntimeException e) { - logger.error("HBaseUtils getHbaseConn() Exception===>{" + e + "}<==="); - } - } - - /** - * 更新变量 - */ - private static void change() { - if (hBaseUtils == null) { - getInstance(); - } - long nowTime = System.currentTimeMillis(); - timestampsFilter(time - 1000, nowTime + 500); - } - - - /** - * 获取变更内容 - * - * @param startTime 开始时间 - * @param endTime 结束时间 - */ - private static void timestampsFilter(Long startTime, Long endTime) { - Long begin = System.currentTimeMillis(); - Table table = null; - ResultScanner scanner = null; - Scan scan2 = new Scan(); - try { - table = connection.getTable(TableName.valueOf("sub:" + hBaseTable)); - scan2.setTimeRange(startTime, endTime); - scanner = table.getScanner(scan2); - for (Result result : scanner) { - Cell[] cells = result.rawCells(); - for (Cell cell : cells) { - String key = Bytes.toString(CellUtil.cloneRow(cell)).trim(); - String value = Bytes.toString(CellUtil.cloneValue(cell)).trim(); - if (subIdMap.containsKey(key)) { - if (!value.equals(subIdMap.get(key))) { - subIdMap.put(key, value); - } - } else { - subIdMap.put(key, value); - } - } - } - Long end = System.currentTimeMillis(); - logger.warn("HBaseUtils Now subIdMap.keySet().size() is: " + subIdMap.keySet().size()); - logger.warn("HBaseUtils Update cache timeConsuming is: " + (end - begin) + ",BeginTime: " + startTime + ",EndTime: " + endTime); - time = endTime; - } catch (IOException ioe) { - logger.error("HBaseUtils timestampsFilter is IOException===>{" + ioe + "}<==="); - } catch (RuntimeException e) { - logger.error("HBaseUtils timestampsFilter is Exception===>{" + e + "}<==="); - } finally { - if (scanner != null) { - scanner.close(); - } - if (table != null) { - try { - table.close(); - } catch (IOException e) { - logger.error("HBase Table Close ERROR! Exception message is:" + e); - } - } - } - } - - /** - * 获取所有的 key value - */ - private static void getAll() { - long begin = System.currentTimeMillis(); - try { - Table table = connection.getTable(TableName.valueOf("sub:" + hBaseTable)); - Scan scan2 = new Scan(); - ResultScanner scanner = table.getScanner(scan2); - for (Result result : scanner) { - Cell[] cells = result.rawCells(); - for (Cell cell : cells) { - subIdMap.put(Bytes.toString(CellUtil.cloneRow(cell)), Bytes.toString(CellUtil.cloneValue(cell))); - } - } - logger.warn("HBaseUtils Get fullAmount List size->subIdMap.size(): " + subIdMap.size()); - logger.warn("HBaseUtils Get fullAmount List size->subIdMap.size() timeConsuming is: " + (System.currentTimeMillis() - begin)); - scanner.close(); - } catch (IOException ioe) { - logger.error("HBaseUtils getAll() is IOException===>{" + ioe + "}<==="); - } catch (RuntimeException e) { - logger.error("HBaseUtils getAll() is Exception===>{" + e + "}<==="); - } - } - - /** - * 验证定时器,每隔一段时间验证一次-验证获取新的Cookie - */ - private void updateCache() { -// ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, -// new BasicThreadFactory.Builder().namingPattern("hbase-change-pool-%d").daemon(true).build()); - ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1); - executorService.scheduleAtFixedRate(new Runnable() { - @Override - public void run() { - try { - if (FlowWriteConfig.HBASE_TICK_TUPLE_FREQ_SECS != 0) { - change(); - } - } catch (RuntimeException e) { - logger.error("HBaseUtils update hbaseCache is error===>{" + e + "}<==="); - } - } - }, 1, FlowWriteConfig.HBASE_TICK_TUPLE_FREQ_SECS, TimeUnit.SECONDS); - } - - - /** - * 获取 account - * - * @param clientIp client_ip - * @return account - */ - public static String getAccount(String clientIp) { - - if (hBaseUtils == null) { - getInstance(); - } - return subIdMap.get(clientIp); - - } - -} diff --git a/src/main/java/com/zdjizhi/utils/http/HttpClientUtil.java b/src/main/java/com/zdjizhi/utils/http/HttpClientUtil.java deleted file mode 100644 index 1adb1d1..0000000 --- a/src/main/java/com/zdjizhi/utils/http/HttpClientUtil.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.zdjizhi.utils.http; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import org.apache.commons.io.IOUtils; -import org.apache.http.HttpEntity; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; - -/** - * 获取网关schema的工具类 - * - * @author qidaijie - */ -public class HttpClientUtil { - private static final Log logger = LogFactory.get(); - - /** - * 请求网关获取schema - * - * @param http 网关url - * @return schema - */ - public static String requestByGetMethod(String http) { - CloseableHttpClient httpClient = HttpClients.createDefault(); - StringBuilder entityStringBuilder; - - HttpGet get = new HttpGet(http); - BufferedReader bufferedReader = null; - CloseableHttpResponse httpResponse = null; - try { - httpResponse = httpClient.execute(get); - HttpEntity entity = httpResponse.getEntity(); - entityStringBuilder = new StringBuilder(); - if (null != entity) { - bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"), 8 * 1024); - int intC; - while ((intC = bufferedReader.read()) != -1) { - char c = (char) intC; - if (c == '\n') { - break; - } - entityStringBuilder.append(c); - } - - return entityStringBuilder.toString(); - } - } catch (IOException e) { - logger.error("Get Schema from Query engine ERROR! Exception message is:" + e); - } finally { - if (httpClient != null) { - try { - httpClient.close(); - } catch (IOException e) { - logger.error("Close HTTP Client ERROR! Exception messgae is:" + e); - } - } - if (httpResponse != null) { - try { - httpResponse.close(); - } catch (IOException e) { - logger.error("Close httpResponse ERROR! Exception messgae is:" + e); - } - } - if (bufferedReader != null) { - IOUtils.closeQuietly(bufferedReader); - } - } - return ""; - } -} diff --git a/src/main/java/com/zdjizhi/utils/json/JsonParseUtil.java b/src/main/java/com/zdjizhi/utils/json/JsonParseUtil.java deleted file mode 100644 index bdcc43d..0000000 --- a/src/main/java/com/zdjizhi/utils/json/JsonParseUtil.java +++ /dev/null @@ -1,283 +0,0 @@ -package com.zdjizhi.utils.json; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.jayway.jsonpath.JsonPath; -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.StringUtil; -import com.zdjizhi.utils.http.HttpClientUtil; -import net.sf.cglib.beans.BeanGenerator; -import net.sf.cglib.beans.BeanMap; - -import java.util.*; - -/** - * 使用FastJson解析json的工具类 - * - * @author qidaijie - */ -public class JsonParseUtil { - - private static final Log logger = LogFactory.get(); - - private static ArrayList dropList = new ArrayList<>(); - - /** - * 模式匹配,给定一个类型字符串返回一个类类型 - * - * @param type 类型 - * @return 类类型 - */ - - private static Class getClassName(String type) { - Class clazz; - - switch (type) { - case "int": - clazz = Integer.class; - break; - case "string": - clazz = String.class; - break; - case "long": - clazz = long.class; - break; - case "array": - clazz = List.class; - break; - case "double": - clazz = double.class; - break; - case "float": - clazz = float.class; - break; - case "char": - clazz = char.class; - break; - case "byte": - clazz = byte.class; - break; - case "boolean": - clazz = boolean.class; - break; - case "short": - clazz = short.class; - break; - default: - clazz = String.class; - } - return clazz; - } - - /** - * 获取属性值的方法 - * - * @param obj 对象 - * @param property key - * @return 属性的值 - */ - public static Object getValue(Object obj, String property) { - try { - BeanMap beanMap = BeanMap.create(obj); - return beanMap.get(property); - } catch (RuntimeException e) { - logger.error("获取json-value异常,异常key:" + property + "异常信息为:" + e); - return null; - } - } - - /** - * 获取属性值的方法 - * - * @param jsonMap 原始日志 - * @param property key - * @return 属性的值 - */ - public static Object getValue(Map jsonMap, String property) { - try { - return jsonMap.getOrDefault(property, null); - } catch (RuntimeException e) { - logger.error("获取json-value异常,异常key:" + property + "异常信息为:" + e); - return null; - } - } - - /** - * 更新属性值的方法 - * - * @param jsonMap 原始日志json map - * @param property 更新的key - * @param value 更新的值 - */ - public static void setValue(Map jsonMap, String property, Object value) { - try { - jsonMap.put(property, value); - } catch (RuntimeException e) { - logger.error("赋予实体类错误类型数据", e); - } - } - - /** - * 更新属性值的方法 - * - * @param obj 对象 - * @param property 更新的key - * @param value 更新的值 - */ - public static void setValue(Object obj, String property, Object value) { - try { - BeanMap beanMap = BeanMap.create(obj); - beanMap.put(property, value); - } catch (ClassCastException e) { - logger.error("赋予实体类错误类型数据", e); - } - } - - /** - * 根据反射生成对象的方法 - * - * @param properties 反射类用的map - * @return 生成的Object类型的对象 - */ - public static Object generateObject(Map properties) { - BeanGenerator generator = new BeanGenerator(); - Set keySet = properties.keySet(); - for (Object aKeySet : keySet) { - String key = (String) aKeySet; - generator.addProperty(key, (Class) properties.get(key)); - } - return generator.create(); - } - - /** - * 通过获取String类型的网关schema链接来获取map,用于生成一个Object类型的对象 - * - * @param http 网关schema地址 - * @return 用于反射生成schema类型的对象的一个map集合 - */ - public static HashMap getMapFromHttp(String http) { - HashMap map = new HashMap<>(16); - - String schema = HttpClientUtil.requestByGetMethod(http); - Object data = JSON.parseObject(schema).get("data"); - - //获取fields,并转化为数组,数组的每个元素都是一个name doc type - JSONObject schemaJson = JSON.parseObject(data.toString()); - JSONArray fields = (JSONArray) schemaJson.get("fields"); - - for (Object field : fields) { - String filedStr = field.toString(); - if (checkKeepField(filedStr)) { - String name = JsonPath.read(filedStr, "$.name").toString(); - String type = JsonPath.read(filedStr, "$.type").toString(); - if (type.contains("{")) { - type = JsonPath.read(filedStr, "$.type.type").toString(); - } - //组合用来生成实体类的map - map.put(name, getClassName(type)); - } else { - dropList.add(filedStr); - } - } - return map; - } - - /** - * 判断字段是否需要保留 - * - * @param message 单个field-json - * @return true or false - */ - private static boolean checkKeepField(String message) { - boolean isKeepField = true; - boolean isHiveDoc = JSON.parseObject(message).containsKey("doc"); - if (isHiveDoc) { - boolean isHiveVi = JsonPath.read(message, "$.doc").toString().contains("visibility"); - if (isHiveVi) { - String visibility = JsonPath.read(message, "$.doc.visibility").toString(); - if (FlowWriteConfig.VISIBILITY.equals(visibility)) { - isKeepField = false; - } - } - } - return isKeepField; - } - - static void dropJsonField(Map jsonMap) { - for (String field : dropList) { - jsonMap.remove(field); - } - } - - /** - * 根据http链接获取schema,解析之后返回一个任务列表 (useList toList funcList paramlist) - * - * @param http 网关url - * @return 任务列表 - */ - public static ArrayList getJobListFromHttp(String http) { - ArrayList list = new ArrayList<>(); - - String schema = HttpClientUtil.requestByGetMethod(http); - //解析data - Object data = JSON.parseObject(schema).get("data"); - - //获取fields,并转化为数组,数组的每个元素都是一个name doc type - JSONObject schemaJson = JSON.parseObject(data.toString()); - JSONArray fields = (JSONArray) schemaJson.get("fields"); - - for (Object field : fields) { - - if (JSON.parseObject(field.toString()).containsKey("doc")) { - Object doc = JSON.parseObject(field.toString()).get("doc"); - - if (JSON.parseObject(doc.toString()).containsKey("format")) { - String name = JSON.parseObject(field.toString()).get("name").toString(); - Object format = JSON.parseObject(doc.toString()).get("format"); - JSONObject formatObject = JSON.parseObject(format.toString()); - - String functions = formatObject.get("functions").toString(); - String appendTo = null; - String params = null; - - if (formatObject.containsKey("appendTo")) { - appendTo = formatObject.get("appendTo").toString(); - } - - if (formatObject.containsKey("param")) { - params = formatObject.get("param").toString(); - } - - - if (StringUtil.isNotBlank(appendTo) && StringUtil.isBlank(params)) { - String[] functionArray = functions.split(FlowWriteConfig.FORMAT_SPLITTER); - String[] appendToArray = appendTo.split(FlowWriteConfig.FORMAT_SPLITTER); - - for (int i = 0; i < functionArray.length; i++) { - list.add(new String[]{name, appendToArray[i], functionArray[i], null}); - } - - } else if (StringUtil.isNotBlank(appendTo) && StringUtil.isNotBlank(params)) { - String[] functionArray = functions.split(FlowWriteConfig.FORMAT_SPLITTER); - String[] appendToArray = appendTo.split(FlowWriteConfig.FORMAT_SPLITTER); - String[] paramArray = params.split(FlowWriteConfig.FORMAT_SPLITTER); - - for (int i = 0; i < functionArray.length; i++) { - list.add(new String[]{name, appendToArray[i], functionArray[i], paramArray[i]}); - - } - } else { - list.add(new String[]{name, name, functions, params}); - } - - } - } - - } - return list; - } - -} \ No newline at end of file diff --git a/src/main/java/com/zdjizhi/utils/json/JsonTypeUtils.java b/src/main/java/com/zdjizhi/utils/json/JsonTypeUtils.java deleted file mode 100644 index 0b6bc1e..0000000 --- a/src/main/java/com/zdjizhi/utils/json/JsonTypeUtils.java +++ /dev/null @@ -1,187 +0,0 @@ -package com.zdjizhi.utils.json; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.JsonMapper; -import com.zdjizhi.utils.exception.FlowWriteException; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author qidaijie - * @Package PACKAGE_NAME - * @Description: - * @date 2021/7/1217:34 - */ -public class JsonTypeUtils { - private static final Log logger = LogFactory.get(); - /** - * 在内存中加载反射类用的map - */ - private static HashMap map = JsonParseUtil.getMapFromHttp(FlowWriteConfig.SCHEMA_HTTP); - - /** - * 类型转换 - * - * @param jsonMap 原始日志map - */ - public static Map typeTransform(Map jsonMap) throws RuntimeException { - JsonParseUtil.dropJsonField(jsonMap); - HashMap tmpMap = new HashMap<>(192); - for (String key : jsonMap.keySet()) { - if (map.containsKey(key)) { - String simpleName = map.get(key).getSimpleName(); - switch (simpleName) { - case "String": - tmpMap.put(key, checkString(jsonMap.get(key))); - break; - case "Integer": - tmpMap.put(key, getIntValue(jsonMap.get(key))); - break; - case "long": - tmpMap.put(key, checkLongValue(jsonMap.get(key))); - break; - case "List": - tmpMap.put(key, checkArray(jsonMap.get(key))); - break; - case "Map": - tmpMap.put(key, checkObject(jsonMap.get(key))); - break; - case "double": - tmpMap.put(key, checkDouble(jsonMap.get(key))); - break; - default: - tmpMap.put(key, checkString(jsonMap.get(key))); - } - } - } - return tmpMap; - } - - /** - * String 类型检验转换方法 - * - * @param value json value - * @return String value - */ - private static String checkString(Object value) { - if (value == null) { - return null; - } - - if (value instanceof Map){ - return JsonMapper.toJsonString(value); - } - - if (value instanceof List){ - return JsonMapper.toJsonString(value); - } - - return value.toString(); - } - - /** - * array 类型检验转换方法 - * - * @param value json value - * @return List value - */ - private static Map checkObject(Object value) { - if (value == null) { - return null; - } - - if (value instanceof Map) { - return (Map) value; - } - - throw new FlowWriteException("can not cast to map, value : " + value); - } - - /** - * array 类型检验转换方法 - * - * @param value json value - * @return List value - */ - private static List checkArray(Object value) { - if (value == null) { - return null; - } - - if (value instanceof List) { - return (List) value; - } - - throw new FlowWriteException("can not cast to List, value : " + value); - } - - private static Long checkLong(Object value) { - if (value == null) { - return null; - } - - return TypeUtils.castToLong(value); - } - - /** - * long 类型检验转换方法,若为空返回基础值 - * - * @param value json value - * @return Long value - */ - private static long checkLongValue(Object value) { - Long longVal = TypeUtils.castToLong(value); - if (longVal == null) { - return 0L; - } - -// return longVal.longValue(); - return longVal; - } - - /** - * Double 类型校验转换方法 - * - * @param value json value - * @return Double value - */ - private static Double checkDouble(Object value) { - if (value == null) { - return null; - } - - return TypeUtils.castToDouble(value); - } - - - private static Integer checkInt(Object value) { - if (value == null) { - return null; - } - - return TypeUtils.castToInt(value); - } - - - /** - * int 类型检验转换方法,若为空返回基础值 - * - * @param value json value - * @return int value - */ - private static int getIntValue(Object value) { - - Integer intVal = TypeUtils.castToInt(value); - if (intVal == null) { - return 0; - } - -// return intVal.intValue(); - return intVal; - } - -} diff --git a/src/main/java/com/zdjizhi/utils/json/TypeUtils.java b/src/main/java/com/zdjizhi/utils/json/TypeUtils.java deleted file mode 100644 index b13627f..0000000 --- a/src/main/java/com/zdjizhi/utils/json/TypeUtils.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.zdjizhi.utils.json; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.StringUtil; -import com.zdjizhi.utils.exception.FlowWriteException; - -/** - * @author qidaijie - * @Package PACKAGE_NAME - * @Description: - * @date 2021/7/1218:20 - */ -public class TypeUtils { - private static final Log logger = LogFactory.get(); - - /** - * Integer 类型判断方法 - * - * @param value json value - * @return Integer value or null - */ - public static Object castToIfFunction(Object value) { - if (value == null) { - return null; - } - - if (value instanceof String) { - return value.toString(); - } - - if (value instanceof Integer) { - return ((Number) value).intValue(); - } - - if (value instanceof Long) { - return ((Number) value).longValue(); - } - -// if (value instanceof Map) { -// return (Map) value; -// } -// -// if (value instanceof List) { -// return Collections.singletonList(value.toString()); -// } - - if (value instanceof Boolean) { - return (Boolean) value ? 1 : 0; - } - - throw new FlowWriteException("can not cast to int, value : " + value); - } - - /** - * Integer 类型判断方法 - * - * @param value json value - * @return Integer value or null - */ - static Integer castToInt(Object value) { - if (value == null) { - return null; - } - - if (value instanceof Integer) { - return (Integer) value; - } - - if (value instanceof Number) { - return ((Number) value).intValue(); - } - - if (value instanceof String) { - String strVal = (String) value; - if (StringUtil.isBlank(strVal)) { - return null; - } - - //将 10,20 类数据转换为10 - if (strVal.contains(FlowWriteConfig.FORMAT_SPLITTER)) { - strVal = strVal.split(FlowWriteConfig.FORMAT_SPLITTER)[0]; - } - - try { - return Integer.parseInt(strVal); - } catch (NumberFormatException ex) { - logger.error("String change Integer Error,The error Str is:" + strVal); - } - } - - if (value instanceof Boolean) { - return (Boolean) value ? 1 : 0; - } - - throw new FlowWriteException("can not cast to int, value : " + value); - } - - /** - * Double类型判断方法 - * - * @param value json value - * @return double value or null - */ - static Double castToDouble(Object value) { - - if (value instanceof Number) { - return ((Number) value).doubleValue(); - } - - if (value instanceof String) { - String strVal = (String) value; - - if (StringUtil.isBlank(strVal)) { - return null; - } - - //将 10,20 类数据转换为10 - if (strVal.contains(FlowWriteConfig.FORMAT_SPLITTER)) { - strVal = strVal.split(FlowWriteConfig.FORMAT_SPLITTER)[0]; - } - - try { - return Double.parseDouble(strVal); - } catch (NumberFormatException ex) { - logger.error("String change Double Error,The error Str is:" + strVal); - } - } - - throw new FlowWriteException("can not cast to double, value : " + value); - } - - /** - * Long类型判断方法 - * - * @param value json value - * @return (Long)value or null - */ - static Long castToLong(Object value) { - if (value == null) { - return null; - } - - if (value instanceof Number) { - return ((Number) value).longValue(); - } - - if (value instanceof String) { - String strVal = (String) value; - - if (StringUtil.isBlank(strVal)) { - return null; - } - - //将 10,20 类数据转换为10 - if (strVal.contains(FlowWriteConfig.FORMAT_SPLITTER)) { - strVal = strVal.split(FlowWriteConfig.FORMAT_SPLITTER)[0]; - } - - try { - return Long.parseLong(strVal); - } catch (NumberFormatException ex) { - logger.error("String change Long Error,The error Str is:" + strVal); - } - } - - throw new FlowWriteException("can not cast to long, value : " + value); - } - -} diff --git a/src/main/java/com/zdjizhi/utils/kafka/CertUtils.java b/src/main/java/com/zdjizhi/utils/kafka/CertUtils.java deleted file mode 100644 index b09eedb..0000000 --- a/src/main/java/com/zdjizhi/utils/kafka/CertUtils.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.zdjizhi.utils.kafka; - -import com.zdjizhi.common.FlowWriteConfig; -import org.apache.kafka.common.config.SslConfigs; - -import java.util.Properties; - -/** - * @author qidaijie - * @Package com.zdjizhi.utils.kafka - * @Description: - * @date 2021/9/610:37 - */ -class CertUtils { - static void chooseCert(String type, Properties properties) { - switch (type) { - case "SSL": - properties.put("security.protocol", "SSL"); - properties.put(SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG, ""); - properties.put("ssl.keystore.location", FlowWriteConfig.TOOLS_LIBRARY + "keystore.jks"); - properties.put("ssl.keystore.password", FlowWriteConfig.KAFKA_PIN); - properties.put("ssl.truststore.location", FlowWriteConfig.TOOLS_LIBRARY + "truststore.jks"); - properties.put("ssl.truststore.password", FlowWriteConfig.KAFKA_PIN); - properties.put("ssl.key.password", FlowWriteConfig.KAFKA_PIN); - break; - case "SASL": - properties.put("security.protocol", "SASL_PLAINTEXT"); - properties.put("sasl.mechanism", "PLAIN"); - properties.put("sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required username=" - + FlowWriteConfig.KAFKA_USER + " password=" + FlowWriteConfig.KAFKA_PIN + ";"); - break; - default: - } - - } -} diff --git a/src/main/java/com/zdjizhi/utils/kafka/Consumer.java b/src/main/java/com/zdjizhi/utils/kafka/Consumer.java deleted file mode 100644 index 1036fe9..0000000 --- a/src/main/java/com/zdjizhi/utils/kafka/Consumer.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.zdjizhi.utils.kafka; - -import com.zdjizhi.common.FlowWriteConfig; -import org.apache.flink.api.common.serialization.SimpleStringSchema; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer; -import org.apache.kafka.clients.consumer.ConsumerConfig; -import org.apache.kafka.common.config.SslConfigs; - - -import java.util.Properties; - -/** - * @author qidaijie - * @Package com.zdjizhi.utils.kafka - * @Description: - * @date 2021/6/813:54 - */ -public class Consumer { - private static Properties createConsumerConfig() { - Properties properties = new Properties(); - properties.put("bootstrap.servers", FlowWriteConfig.INPUT_KAFKA_SERVERS); - properties.put("group.id", FlowWriteConfig.GROUP_ID); - properties.put("session.timeout.ms", "60000"); - properties.put("max.poll.records", "3000"); - properties.put("max.partition.fetch.bytes", "31457280"); - properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); - properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); - - CertUtils.chooseCert(FlowWriteConfig.KAFKA_SOURCE_PROTOCOL,properties); - - return properties; - } - - public static FlinkKafkaConsumer getKafkaConsumer() { - FlinkKafkaConsumer kafkaConsumer = new FlinkKafkaConsumer<>(FlowWriteConfig.INPUT_KAFKA_TOPIC, - new SimpleStringSchema(), createConsumerConfig()); - - kafkaConsumer.setCommitOffsetsOnCheckpoints(false); - kafkaConsumer.setStartFromGroupOffsets(); - - return kafkaConsumer; - } -} diff --git a/src/main/java/com/zdjizhi/utils/kafka/Producer.java b/src/main/java/com/zdjizhi/utils/kafka/Producer.java deleted file mode 100644 index 58b3e7a..0000000 --- a/src/main/java/com/zdjizhi/utils/kafka/Producer.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.zdjizhi.utils.kafka; - -import com.zdjizhi.common.FlowWriteConfig; -import org.apache.flink.api.common.serialization.SimpleStringSchema; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer; -import org.apache.kafka.clients.producer.ProducerConfig; -import org.apache.kafka.common.config.SslConfigs; - -import java.util.Optional; -import java.util.Properties; - -/** - * @author qidaijie - * @Package com.zdjizhi.utils.kafka - * @Description: - * @date 2021/6/814:04 - */ -public class Producer { - - private static Properties createPercentProducerConfig() { - Properties properties = new Properties(); - properties.put("bootstrap.servers", FlowWriteConfig.OUTPUT_KAFKA_SERVERS); - properties.put("acks", FlowWriteConfig.PRODUCER_ACK); - properties.put("retries", FlowWriteConfig.RETRIES); - properties.put("linger.ms", FlowWriteConfig.LINGER_MS); - properties.put("request.timeout.ms", FlowWriteConfig.REQUEST_TIMEOUT_MS); - properties.put("batch.size", FlowWriteConfig.BATCH_SIZE); - properties.put("buffer.memory", FlowWriteConfig.BUFFER_MEMORY); - properties.put("max.request.size", FlowWriteConfig.MAX_REQUEST_SIZE); - properties.put("compression.type", FlowWriteConfig.PRODUCER_KAFKA_COMPRESSION_TYPE); - - CertUtils.chooseCert(FlowWriteConfig.KAFKA_SINK_PROTOCOL, properties); - - return properties; - } - private static Properties createProducerConfig() { - Properties properties = new Properties(); - properties.put("bootstrap.servers", FlowWriteConfig.INPUT_KAFKA_SERVERS); - properties.put("acks", FlowWriteConfig.PRODUCER_ACK); - properties.put("retries", FlowWriteConfig.RETRIES); - properties.put("linger.ms", FlowWriteConfig.LINGER_MS); - properties.put("request.timeout.ms", FlowWriteConfig.REQUEST_TIMEOUT_MS); - properties.put("batch.size", FlowWriteConfig.BATCH_SIZE); - properties.put("buffer.memory", FlowWriteConfig.BUFFER_MEMORY); - properties.put("max.request.size", FlowWriteConfig.MAX_REQUEST_SIZE); - properties.put("compression.type", FlowWriteConfig.PRODUCER_KAFKA_COMPRESSION_TYPE); - - CertUtils.chooseCert(FlowWriteConfig.KAFKA_SOURCE_PROTOCOL,properties); - - return properties; - } - - public static FlinkKafkaProducer getPercentKafkaProducer() { - FlinkKafkaProducer kafkaProducer = new FlinkKafkaProducer( - FlowWriteConfig.PERCENT_KAFKA_TOPIC, - new SimpleStringSchema(), - createPercentProducerConfig(), Optional.empty()); - - kafkaProducer.setLogFailuresOnly(false); - -// kafkaProducer.setWriteTimestampToKafka(true); - - return kafkaProducer; - } - - - public static FlinkKafkaProducer getKafkaProducer() { - FlinkKafkaProducer kafkaProducer = new FlinkKafkaProducer( - FlowWriteConfig.OUTPUT_KAFKA_TOPIC, - new SimpleStringSchema(), - createProducerConfig(), Optional.empty()); - - kafkaProducer.setLogFailuresOnly(false); - -// kafkaProducer.setWriteTimestampToKafka(true); - - return kafkaProducer; - } -} diff --git a/src/main/java/com/zdjizhi/utils/ordinary/MD5Utils.java b/src/main/java/com/zdjizhi/utils/ordinary/MD5Utils.java deleted file mode 100644 index aa55951..0000000 --- a/src/main/java/com/zdjizhi/utils/ordinary/MD5Utils.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.zdjizhi.utils.ordinary; - -import org.apache.log4j.Logger; - -import java.security.MessageDigest; - -/** - * 描述:转换MD5工具类 - * - * @author Administrator - * @create 2018-08-13 15:11 - */ -public class MD5Utils { - private static Logger logger = Logger.getLogger(MD5Utils.class); - - public static String md5Encode(String msg) throws Exception { - try { - byte[] msgBytes = msg.getBytes("utf-8"); - /* - * 声明使用Md5算法,获得MessaDigest对象 - */ - MessageDigest md5 = MessageDigest.getInstance("MD5"); - /* - * 使用指定的字节更新摘要 - */ - md5.update(msgBytes); - /* - * 完成哈希计算,获得密文 - */ - byte[] digest = md5.digest(); - /* - * 以上两行代码等同于 - * byte[] digest = md5.digest(msgBytes); - */ - return byteArr2hexString(digest); - } catch (Exception e) { - logger.error("Error in conversion MD5! " + msg); -// e.printStackTrace(); - return ""; - } - } - - /** - * 将byte数组转化为16进制字符串形式 - * - * @param bys 字节数组 - * @return 字符串 - */ - public static String byteArr2hexString(byte[] bys) { - StringBuffer hexVal = new StringBuffer(); - int val = 0; - for (byte by : bys) { - //将byte转化为int 如果byte是一个负数就必须要和16进制的0xff做一次与运算 - val = ((int) by) & 0xff; - if (val < 16) { - hexVal.append("0"); - } - hexVal.append(Integer.toHexString(val)); - } - - return hexVal.toString(); - - } -} diff --git a/src/main/java/com/zdjizhi/utils/system/FlowWriteConfigurations.java b/src/main/java/com/zdjizhi/utils/system/FlowWriteConfigurations.java deleted file mode 100644 index 08fa29b..0000000 --- a/src/main/java/com/zdjizhi/utils/system/FlowWriteConfigurations.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.zdjizhi.utils.system; - -import com.zdjizhi.utils.StringUtil; - -import java.io.IOException; -import java.util.Locale; -import java.util.Properties; - - -/** - * @author Administrator - */ - -public final class FlowWriteConfigurations { - - private static Properties propKafka = new Properties(); - private static Properties propService = new Properties(); - - - public static String getStringProperty(Integer type, String key) { - if (type == 0) { - return propService.getProperty(key); - } else if (type == 1) { - return propKafka.getProperty(key); - } else { - return null; - } - - } - - public static Integer getIntProperty(Integer type, String key) { - if (type == 0) { - return Integer.parseInt(propService.getProperty(key)); - } else if (type == 1) { - return Integer.parseInt(propKafka.getProperty(key)); - } else { - return null; - } - } - - public static Long getLongProperty(Integer type, String key) { - if (type == 0) { - return Long.parseLong(propService.getProperty(key)); - } else if (type == 1) { - return Long.parseLong(propKafka.getProperty(key)); - } else { - return null; - } - } - - public static Boolean getBooleanProperty(Integer type, String key) { - if (type == 0) { - return StringUtil.equals(propService.getProperty(key).toLowerCase().trim().toUpperCase(Locale.ENGLISH), "true"); - } else if (type == 1) { - return StringUtil.equals(propKafka.getProperty(key).toLowerCase().trim().toUpperCase(Locale.ENGLISH), "true"); - } else { - return null; - } - } - - static { - try { - propService.load(FlowWriteConfigurations.class.getClassLoader().getResourceAsStream("service_flow_config.properties")); - propKafka.load(FlowWriteConfigurations.class.getClassLoader().getResourceAsStream("default_config.properties")); - } catch (IOException | RuntimeException e) { - propKafka = null; - propService = null; - } - } -} diff --git a/src/main/java/com/zdjizhi/utils/zookeeper/DistributedLock.java b/src/main/java/com/zdjizhi/utils/zookeeper/DistributedLock.java deleted file mode 100644 index 2afab03..0000000 --- a/src/main/java/com/zdjizhi/utils/zookeeper/DistributedLock.java +++ /dev/null @@ -1,190 +0,0 @@ -package com.zdjizhi.utils.zookeeper; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import org.apache.zookeeper.*; -import org.apache.zookeeper.data.Stat; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Condition; -import java.util.concurrent.locks.Lock; - -/** - * @author qidaijie - */ -public class DistributedLock implements Lock, Watcher { - private static final Log logger = LogFactory.get(); - - private ZooKeeper zk = null; - /** - * 根节点 - */ - private final String ROOT_LOCK = "/locks"; - /** - * 竞争的资源 - */ - private String lockName; - /** - * 等待的前一个锁 - */ - private String waitLock; - /** - * 当前锁 - */ - private String currentLock; - /** - * 计数器 - */ - private CountDownLatch countDownLatch; - - private int sessionTimeout = 2000; - - private List exceptionList = new ArrayList(); - - /** - * 配置分布式锁 - * - * @param config 连接的url - * @param lockName 竞争资源 - */ - public DistributedLock(String config, String lockName) { - this.lockName = lockName; - try { - // 连接zookeeper - zk = new ZooKeeper(config, sessionTimeout, this); - Stat stat = zk.exists(ROOT_LOCK, false); - if (stat == null) { - // 如果根节点不存在,则创建根节点 - zk.create(ROOT_LOCK, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); - } - } catch (IOException | InterruptedException | KeeperException e) { - logger.error("Node already exists!"); - } - } - - // 节点监视器 - @Override - public void process(WatchedEvent event) { - if (this.countDownLatch != null) { - this.countDownLatch.countDown(); - } - } - - @Override - public void lock() { - if (exceptionList.size() > 0) { - throw new LockException(exceptionList.get(0)); - } - try { - if (this.tryLock()) { - logger.info(Thread.currentThread().getName() + " " + lockName + "获得了锁"); - } else { - // 等待锁 - waitForLock(waitLock, sessionTimeout); - } - } catch (InterruptedException | KeeperException e) { - logger.error("获取锁异常" + e); - } - } - - @Override - public boolean tryLock() { - try { - String splitStr = "_lock_"; - if (lockName.contains(splitStr)) { - throw new LockException("锁名有误"); - } - // 创建临时有序节点 - currentLock = zk.create(ROOT_LOCK + "/" + lockName + splitStr, new byte[0], - ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); - // 取所有子节点 - List subNodes = zk.getChildren(ROOT_LOCK, false); - // 取出所有lockName的锁 - List lockObjects = new ArrayList(); - for (String node : subNodes) { - String tmpNode = node.split(splitStr)[0]; - if (tmpNode.equals(lockName)) { - lockObjects.add(node); - } - } - Collections.sort(lockObjects); - // 若当前节点为最小节点,则获取锁成功 - if (currentLock.equals(ROOT_LOCK + "/" + lockObjects.get(0))) { - return true; - } - // 若不是最小节点,则找到自己的前一个节点 - String prevNode = currentLock.substring(currentLock.lastIndexOf("/") + 1); - waitLock = lockObjects.get(Collections.binarySearch(lockObjects, prevNode) - 1); - } catch (InterruptedException | KeeperException e) { - logger.error("获取锁过程异常" + e); - } - return false; - } - - - @Override - public boolean tryLock(long timeout, TimeUnit unit) { - try { - if (this.tryLock()) { - return true; - } - return waitForLock(waitLock, timeout); - } catch (KeeperException | InterruptedException | RuntimeException e) { - logger.error("判断是否锁定异常" + e); - } - return false; - } - - // 等待锁 - private boolean waitForLock(String prev, long waitTime) throws KeeperException, InterruptedException { - Stat stat = zk.exists(ROOT_LOCK + "/" + prev, true); - - if (stat != null) { - this.countDownLatch = new CountDownLatch(1); - // 计数等待,若等到前一个节点消失,则precess中进行countDown,停止等待,获取锁 - this.countDownLatch.await(waitTime, TimeUnit.MILLISECONDS); - this.countDownLatch = null; - } - return true; - } - - @Override - public void unlock() { - try { - zk.delete(currentLock, -1); - currentLock = null; - zk.close(); - } catch (InterruptedException | KeeperException e) { - logger.error("关闭锁异常" + e); - } - } - - @Override - public Condition newCondition() { - return null; - } - - @Override - public void lockInterruptibly() throws InterruptedException { - this.lock(); - } - - - public class LockException extends RuntimeException { - private static final long serialVersionUID = 1L; - - public LockException(String e) { - super(e); - } - - public LockException(Exception e) { - super(e); - } - } - -} \ No newline at end of file diff --git a/src/main/java/com/zdjizhi/utils/zookeeper/ZookeeperUtils.java b/src/main/java/com/zdjizhi/utils/zookeeper/ZookeeperUtils.java deleted file mode 100644 index 9efbd46..0000000 --- a/src/main/java/com/zdjizhi/utils/zookeeper/ZookeeperUtils.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.zdjizhi.utils.zookeeper; - -import cn.hutool.core.util.StrUtil; -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import org.apache.zookeeper.*; -import org.apache.zookeeper.data.ACL; -import org.apache.zookeeper.data.Stat; - -import java.io.IOException; -import java.util.List; -import java.util.concurrent.CountDownLatch; - -/** - * @author qidaijie - * @Package cn.ac.iie.utils.zookeeper - * @Description: - * @date 2020/11/1411:28 - */ -public class ZookeeperUtils implements Watcher { - private static final Log logger = LogFactory.get(); - private static final int ID_MAX = 255; - - private ZooKeeper zookeeper; - - private static final int SESSION_TIME_OUT = 20000; - - private CountDownLatch countDownLatch = new CountDownLatch(1); - - @Override - public void process(WatchedEvent event) { - if (event.getState() == Event.KeeperState.SyncConnected) { - countDownLatch.countDown(); - } - } - - - /** - * 修改节点信息 - * - * @param path 节点路径 - */ - public int modifyNode(String path, String zookeeperIp) { - createNode(path, "0".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, zookeeperIp); - int workerId = 0; - try { - connectZookeeper(zookeeperIp); - Stat stat = zookeeper.exists(path, true); - workerId = Integer.parseInt(getNodeDate(path)); - if (workerId > ID_MAX) { - workerId = 0; - zookeeper.setData(path, "1".getBytes(), stat.getVersion()); - } else { - String result = String.valueOf(workerId + 1); - if (stat != null) { - zookeeper.setData(path, result.getBytes(), stat.getVersion()); - } else { - logger.error("Node does not exist!,Can't modify"); - } - } - } catch (KeeperException | InterruptedException e) { - logger.error("modify error Can't modify," + e); - } finally { - closeConn(); - } - logger.warn("workerID is:" + workerId); - return workerId; - } - - /** - * 连接zookeeper - * - * @param host 地址 - */ - public void connectZookeeper(String host) { - try { - zookeeper = new ZooKeeper(host, SESSION_TIME_OUT, this); - countDownLatch.await(); - } catch (IOException | InterruptedException e) { - logger.error("Connection to the Zookeeper Exception! message:" + e); - } - } - - /** - * 关闭连接 - */ - public void closeConn() { - try { - if (zookeeper != null) { - zookeeper.close(); - } - } catch (InterruptedException e) { - logger.error("Close the Zookeeper connection Exception! message:" + e); - } - } - - /** - * 获取节点内容 - * - * @param path 节点路径 - * @return 内容/异常null - */ - public String getNodeDate(String path) { - String result = null; - Stat stat = new Stat(); - try { - byte[] resByte = zookeeper.getData(path, true, stat); - - result = StrUtil.str(resByte, "UTF-8"); - } catch (KeeperException | InterruptedException e) { - logger.error("Get node information exception" + e); - } - return result; - } - - /** - * @param path 节点创建的路径 - * @param date 节点所存储的数据的byte[] - * @param acls 控制权限策略 - */ - public void createNode(String path, byte[] date, List acls, String zookeeperIp) { - try { - connectZookeeper(zookeeperIp); - Stat exists = zookeeper.exists(path, true); - if (exists == null) { - Stat existsSnowflakeld = zookeeper.exists("/Snowflake", true); - if (existsSnowflakeld == null) { - zookeeper.create("/Snowflake", null, acls, CreateMode.PERSISTENT); - } - zookeeper.create(path, date, acls, CreateMode.PERSISTENT); - } else { - logger.warn("Node already exists ! Don't need to create"); - } - } catch (KeeperException | InterruptedException e) { - logger.error(e); - } finally { - closeConn(); - } - } -} diff --git a/src/main/log4j.properties b/src/main/log4j.properties deleted file mode 100644 index 9d91936..0000000 --- a/src/main/log4j.properties +++ /dev/null @@ -1,25 +0,0 @@ -#Log4j -log4j.rootLogger=info,console,file -# 控制台日志设置 -log4j.appender.console=org.apache.log4j.ConsoleAppender -log4j.appender.console.Threshold=info -log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss}] [%-5p] [Thread\:%t] %l %x - <%m>%n - -# 文件日志设置 -log4j.appender.file=org.apache.log4j.DailyRollingFileAppender -log4j.appender.file.Threshold=info -log4j.appender.file.encoding=UTF-8 -log4j.appender.file.Append=true -#路径请用相对路径,做好相关测试输出到应用目下 -log4j.appender.file.file=${nis.root}/log/galaxy-name.log -log4j.appender.file.DatePattern='.'yyyy-MM-dd -log4j.appender.file.layout=org.apache.log4j.PatternLayout -#log4j.appender.file.layout.ConversionPattern=%d{HH:mm:ss} %X{ip} [%t] %5p %c{1} %m%n -log4j.appender.file.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss}] [%-5p] %X{ip} [Thread\:%t] %l %x - %m%n -#MyBatis 配置,com.nis.web.dao是mybatis接口所在包 -log4j.logger.com.nis.web.dao=debug -#bonecp数据源配置 -log4j.category.com.jolbox=debug,console - - diff --git a/src/main/logback.xml b/src/main/logback.xml deleted file mode 100644 index a508b6b..0000000 --- a/src/main/logback.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - ${LOG_PATTERN} - - - - - - - ${LOG_FILE_PATH} - - 30 - - - 20MB - - - - - ${LOG_PATTERN} - - - - - - - - - - - \ No newline at end of file diff --git a/src/test/java/com/zdjizhi/KafkaTest.java b/src/test/java/com/zdjizhi/KafkaTest.java deleted file mode 100644 index 4b034a3..0000000 --- a/src/test/java/com/zdjizhi/KafkaTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.zdjizhi; - -import cn.hutool.log.Log; -import cn.hutool.log.LogFactory; -import org.apache.kafka.clients.producer.*; -import org.apache.kafka.common.config.SslConfigs; - -import java.util.Properties; - -/** - * @author qidaijie - * @Package com.zdjizhi - * @Description: - * @date 2021/8/217:39 - */ -public class KafkaTest { - private static final Log logger = LogFactory.get(); - - public static void main(String[] args) { - Properties properties = new Properties(); - properties.put("bootstrap.servers", "192.168.44.12:9091"); - properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); - properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); - properties.put("acks", "1"); -// properties.put("retries", DefaultProConfig.RETRIES); -// properties.put("linger.ms", DefaultProConfig.LINGER_MS); -// properties.put("request.timeout.ms", DefaultProConfig.REQUEST_TIMEOUT_MS); -// properties.put("batch.size", DefaultProConfig.BATCH_SIZE); -// properties.put("buffer.memory", DefaultProConfig.BUFFER_MEMORY); -// properties.put("max.request.size", DefaultProConfig.MAX_REQUEST_SIZE); - - properties.put("security.protocol", "SSL"); -// properties.put("ssl.keystore.location", "D:\\K18-Phase2\\tsgSpace\\dat\\kafka\\client.keystore.jks"); - properties.put("ssl.keystore.location", "D:\\K18-Phase2\\tsgSpace\\dat\\tsg\\keystore.jks"); - properties.put("ssl.keystore.password", "galaxy2019"); -// properties.put("ssl.truststore.location", "D:\\K18-Phase2\\tsgSpace\\dat\\kafka\\client.truststore.jks"); - properties.put("ssl.truststore.location", "D:\\K18-Phase2\\tsgSpace\\dat\\tsg\\truststore.jks"); - properties.put("ssl.truststore.password", "galaxy2019"); - properties.put("ssl.key.password", "galaxy2019"); - properties.put(SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG, ""); - - Producer producer = new KafkaProducer(properties); - - producer.send(new ProducerRecord<>("test", "hello!"), new Callback() { - @Override - public void onCompletion(RecordMetadata metadata, Exception exception) { - if (exception != null) { - logger.error("写入test出现异常", exception); - } - } - }); - - producer.close(); - } -} diff --git a/src/test/java/com/zdjizhi/LocationTest.java b/src/test/java/com/zdjizhi/LocationTest.java deleted file mode 100644 index e7b2d15..0000000 --- a/src/test/java/com/zdjizhi/LocationTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.zdjizhi; - -import com.zdjizhi.common.FlowWriteConfig; -import com.zdjizhi.utils.IpLookup; -import org.junit.Test; - -/** - * @author qidaijie - * @Package com.zdjizhi - * @Description: - * @date 2021/8/1811:34 - */ -public class LocationTest { - private static IpLookup ipLookup = new IpLookup.Builder(false) - .loadDataFileV4("D:\\K18-Phase2\\tsgSpace\\dat\\tsg\\ip_v4.mmdb") - .loadDataFileV6("D:\\K18-Phase2\\tsgSpace\\dat\\tsg\\ip_v6.mmdb") - .loadDataFilePrivateV4("D:\\K18-Phase2\\tsgSpace\\dat\\tsg\\ip_private_v4.mmdb") - .loadDataFilePrivateV6("D:\\K18-Phase2\\tsgSpace\\dat\\tsg\\ip_private_v6.mmdb") - .build(); - - @Test - public void IpLocationTest() { - System.out.println(ipLookup.cityLookupDetail("24.241.112.0")); - System.out.println(ipLookup.cityLookupDetail("1.1.1.1")); - System.out.println(ipLookup.cityLookupDetail("192.168.50.58")); - System.out.println(ipLookup.cityLookupDetail("2600:1700:9010::")); - } -} diff --git a/src/test/java/com/zdjizhi/TestTime.java b/src/test/java/com/zdjizhi/TestTime.java deleted file mode 100644 index 0f026c3..0000000 --- a/src/test/java/com/zdjizhi/TestTime.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.zdjizhi; - -import com.zdjizhi.utils.StringUtil; - -public class TestTime { - public static void main(String[] args) { - String s = null; - String rrr = rrr(s); - System.out.println(rrr); - } - - public static String rrr(String url){ - if (StringUtil.isBlank(url)) { - return "这是空的"; - }else { - return "这不是空的"; - } - } -} diff --git a/target/classes/com/zdjizhi/bean/FileMeta.class b/target/classes/com/zdjizhi/bean/FileMeta.class deleted file mode 100644 index a392040ede9f99800317cbff96a4b68764d023f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1561 zcmaiyZ%@-u6vm&sbpu8xxG@wE`6t>9p@R5ILt;owAOlP=yj|`}9e3GU(iRfk~!T}YF2d;dJ=`Q3Bw?>|3(0ocZy0!Fbuh7oLVFgd*9u*qR-1g}T1 zEl{-FZr61h9k9lw(!jo@VT^uo4UJ z6mQC?rj@S}=el#eVho<<^hHX4+*k2sN_%h3i)7L-S~2d^uvLkyJ|>%0qErKmg@o9J-Do9_X0Bq>hKs1!fpNwQtm&__-Z5+qM;8iJtQ)J^36m zoRa=D&Prp36Ne+^4o6B)<2dLdC{vuGnMtFdF<1Km@jX0Np_uP2Vw(Q-=>HKO(~JNy zOR*=;^!92u$b3zRi>cx{Jc-0R$kInvwS`+`V(S8tgG!MjO17U4=Xvz(8IAAB)bn^6 z<%(}{gY1_CNF^0y0gL}ZGChmh+%2+6kQoA*9Rk9IW{@Q;r+{eR5+L)bAS-w_0J3%q zEeWzjAj?BQxYG=>isvaHxg^MHD#!~MX&|{INR>cpLqPbcF-SGFHTh&~)>A=h>8;5p TK{g3wYX}Ixbp}}rd+_ovKtKT` diff --git a/target/classes/com/zdjizhi/bean/SourceList.class b/target/classes/com/zdjizhi/bean/SourceList.class deleted file mode 100644 index ceb238ce84a37d3d22937fb215a7a6723dcc936e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 802 zcmaKp!A`b_uq2~63M`tz|i`hsxJ&*fNJN9u!B+0ch^yEzj6>6)(lJi_$mx&zmCUh7kvM?B`|7^xkTwd{gZ|wCY zPU&Sb^jsyCxU3}AjL$GQZk6P T4q_8XX$y$DPz6$sSFij68Jv)f diff --git a/target/classes/com/zdjizhi/common/FlowWriteConfig.class b/target/classes/com/zdjizhi/common/FlowWriteConfig.class deleted file mode 100644 index eb00296affe5fbb2624308a70835f4e53294c258..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3680 zcmb7G`FGq_6~50|{OrhWJaHDMEosvLNt()On{G+E$TJ#Sv1T-tG;R|DLY|Rr#hTGn z(xh?N3KUwPl(H8nJB6}SQfMep$_}OMTiN&JNB#f~hkNgg<4KQuI3(xz`|k4IyZ63# zujYyWJo*>_?1O&}f(dsI!t3E432zvLd*O`(Fa>Xt@MgldNO&vZ+a$c5@IDFeAbh8U zcM;w%;oY?8JtVwW!utr{FX01(AC&MR!UrULnD8SK9whvzgpUz^T*4;^KPll;grAo1 z8N!Doe3tN(gog<~C*kvik4QL8_yq}%5`Iy_mk7Ts;W5ImNO+v^s}jCO_;m^2ApE9; zZxMc5!gmP2E8z*k?@4%)@cR;eK=?xmKO+3Ggr5-pRKm{)e=gw{gum>Er~2Vn0?svx zUPZIDl4t7W33pO}Fa!+c<7S%q&1~9_+QBL;?ZnN7LYTK`N#dS$ZyV# zIav}m=MG5tHSSlm?2_hsP6hp3-InkhI>hk~Iab-5(hqyCHX-4+0yg5wd8=G7Tmvo3 z{=XBjreqa#Q^M~B3|DN+weptPG3mUNqgH%;9%oRWYIJy99WESL+D19*~a zYh{N5JKKBf*Xgk+tFPC>$~S_<9K9QE1_r3(H)2C;2I^} zs=8hYLs(zZZt*IXX?nJvx9kF{Mp>oVZl`KR-OW#W*h{eD_G=&ZB;9nD@J|U@c=D9 zg-^=0EYtB!W8Btkd_ddIm^%Se)$FAr9IjwZHg+?ys&-!Ymfiv8+0`56sUGcMM_a{g z1PpY9icv;)%#rS@TbOQi{kHDf29<5VG|CegB~?6!_g~c=_pECe9M`DIj&THo8XB(_ zi{!1BEJ}m#XlYf)Wu23s)JvK->ADpG>*yWfBk4+(eaVKXSV8#6)T`ZEz~a%NofqiH`0N$x6FXY*kyV24?Y8)GNy$HJ5I;TZBp+#D-L z@ohIJVHRK?&xUi@1M*-k>K-=e#OU>;zv;sg=wQ7{-VHN;cp7O06e^`Eb*J^Y@9TDofLQ>8Mn^Q_-UYKVQoRp+N~&1 zXOrMoH4SR10zP?c@msBDu+NY^SNAhttp(WAi5k|`X1k$4jV!}aJf}8;psr%>xOEmN zP$$Dk!w)019?bgfC{t_mev$^60)K~pC=dWXlJ(uFsHSSuZ{WgN(&y43O~bf}@icjqEEgMnA&6-?3mh^zXHceGtkkr!lnYZ@oKCO zy^L;oyIGtdQ-2cRw~4M{k(Xi%;3t7E^du>A_zc@Ynw@pkFQV5oIOEeLrr}A<;KigF znrY9@(&C^IQ}!<*<$AjLrA<1{FD3oDv^F0!e04s{S_-_3&RR!L9G`ASbvvu#I9Gy|L$fyb@|(C%^VAA8D4okOz9!l@dLg`K;I4($#nwOCKzspjox<@HN(pbyPrp_ z(Q*35TeAW-?KF0+_yOJ98&o?BqjW4?OtYZz^g+{3eChxkOXti586HtdV!WMfQNaG4 zD{S4P>i&pWIe=l@t>dt~;kEz&hTSvZBK!qp;*Xl$FbX9og8&PqKB%C46WC{D2W7WM zuA)5MBj1ejEj{vKl#let&qMiWkNkX;aa!V8qcj*9ar`mjm}A7D#)vbF5l0mxjwVJN zM2t9i7;(NZ;xJ*v!NG`gf)NJ-BMt&aYwA>{do>Oh)WNM(jOCY&k~k zFGg%EM(ig>>>ft!8AfaqMr;d4>;*<_07iWEh<#Xd{N~`_J5U-!6o_kfKLX+*Hopr0 zu4Ux_yc)UEaezDFE|es^W@&Msj+@~>@xZFn(3itMt53li=4+YvGndQf%ypYjm$SO-^_dq^HJtodF^@3&u4xC^Jg*N#{5F&7ct+? z{9@)im_M8ObC^Gu`A+7$nD1tO3G+S7FJ-QB3}ejqGQW)Z<;<^OzK{8p%&+3LS2Mqc z_17}r&-?)MgUqkvnq1HP2Ie<1*O-qp&oeLZo;t5BGM`{R$=qOmh%Q$EUG6<_G5+0z z7rPm@;Qt-iBYR;h9E9^=63)jyya0PG73MFs_NI~d|_ RI3(`FNg&|07*8L(?!PhkjE4XK diff --git a/target/classes/com/zdjizhi/topology/LogFlowWriteTopology.class b/target/classes/com/zdjizhi/topology/LogFlowWriteTopology.class deleted file mode 100644 index d330b637f45a1c673b543461926c9cd767f9f195..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4907 zcmb_gYj+z*8GbgFy|S{oSc#K3g+^&gVkdPrG@&iFo8s6~a3V`aQWBC<%vxH>8?Sc7 zYLz-EZK1SWTS^NA%C%g>r4-_T;?}f4`2^oM2mS#+0nULBaCk;5S#m7-lJ?7L=AD^m z-g(~3yraMT@AWqU9K)Xi=*O7=&f;7EAI5pny3mP-@sR)?!AAp_#K%NelQ9)Qr%xObY#UyPPC?F7y)b*!xu5*hbbc;z;>^1b+ToPX@vkj4oA!>`r!sp!X@!}RETHA z1d1<<9SCv7kH>^IpOEo*C*F%EWIP$b0i5yUlj8SN;`5aFd|JlS8}ST26To}$*#JI= z&&&9Ngbvfr<#b2FwrJW?r%SGFn<`~$)XoiZc*w8}_qc?%-oCREd?R*7m#`&jSbD6K zpVFO_Hf2&0jM{0qH$%~P+hxV6aTWjjAP$OyIeM{Vx)S7qW2f~Z^^B|oD@lA)kC)s+$@MVf z1>MnH+ab0@Lb@BY56`Ccf@|28IG*O@xYxEOr{mdl>yqKvR$jNL*~!)PX_ze-;=#hR zdb%Wb3fF|tLHPLn~we{sf&EBVO3wNl2DV{>u`8apEunw@+ z)@T7fu@3OM+jtDLfZUXHwe-xmR;W0?j4#S~mQg9eKa{3lR)Q$tAw&!jGCj=#;IQy{ zg*oSaL{RV?z9i#$1z*Ms3SPulWPDY@*Kk$F*A;vNFL4hA-^8~Rd>dCK9BB+R`hi(g zvn4An9HOXFwGlgCFm+eYM5CuCSzL5?s}hzkZ3+{C>2yr$rFEJ)Z|-y%MBQBS)v zey89Kys6;#!c+dB;E#AqLSG}VD<)bA;Z+jn+LDWefmLu;$R*@1r@PH^mV~k1zSUxM zZ5lF_gc@n_!eU0)Umamwl=8wz9m+(;U z*xNiwS2TWdG8PVxPL9OKC!*n0n49Ibf`rGKkSywe>T&A~Gac4a%er`Neb*?)@x=I2LyxV`I4kaPZ0&T^Z&}u6*~*0? zp;^QkHjw>&0!{SRd86Ce?c7VZodkFGj{){N zF^C~bxOl^z1nZ#eKl9iSJv5KDGJJDrFQcOjd3+9jwtO$+@p~4~dHyB>Wo!&8Wo(+m z=E|HcvHk^YBEE*B+_{RsH+WYgeyqQ;WOs1ik|l=@w%uFC-RG|1Kx_{C7jS?Y^alIN zIM`ptp)&4idjtKi;cy$+SFe+ZKjW|X8~+FKRfwCyE)sGFdm(Hl``x%3d$6C}A0UB! zh~gkpw8#{WV3xLdl9qU$WL_oJFOlF^Nbe0ih_`T@$R~&$A^HgZj#2y*Vf-5(tQaK$ zKk**n%;PjdiZdT#%SYT}eA^78ohUmhvNo>W$MF%)qp64!=C2R`BJxS<-;I9|bBu;R zMfowV^l(ov;+|f_jV|JfQE%lqSH`%q3%>t~M`T>agnCNGhxSp$#G<3^sdy0}&*R7q V>=&-aM-9K8tLEqvqK=MF;V+-S z-#R0HjXr=6<#@L(7DvU-bobudbMHNO&vw86`1}pP30&_)4>CHsk?q6~hIJgph>pV; z)nKZ9OvAX2II?jZQ~PnXoQPvW?I$&y+KSUSqv5QEa||6}Rn*dB3@OX;R?X+-74f_( z%qSFY&9r^robmlz%2C)!Aw@XNa4_>faCV8IJ?E7b$jf7j~0mI>S5~;{9 z+aXVppR=7RPl;NJ2Z0w%O-)U|FmMT%)ly*C@^X@52Cm>LL!wpr`tk~QLJgLId0Zo< zHy1iRP71ZM=>TOzw&dn{)U!dAm=?-)uB6|_9I{tEY0kOc)7yavdCrrMM1^7J%)&xx zv5>o3TD-MjKy=IUhE@Zf5yAcUUH-U~rw;hMq z=x&eE?Ou1rmD8WeT8=cUQRsQD>3S8@@+#_n+rH0bnPDWep>0E$bJ;&aO|2;LH+w%Av6e?lULxAkTQ(e0ozs{J5Y zzSP5g?F2(me4#FPRr6Z>IC! zu(`BVySUT^S8%UZv~Cb|NJ^=7t+ra1y06vNwQ3cmE`NyMeQ&lb(4X@ockXiTcg{WM zJLlfvvHw2!Fo3oAcK{xw6gHL&TYRU*%s~Z9kru;4qB$&@BMOe<^?F1VLv`1<9#1M1TY|Sa5#?ZJhhgfS>5&0F)vFD} zIpf=4n1;PcLPbX+qQ!S>DMKt|SG{)35I%^+XeXs-^w?VD01ua4pJf{(IyH?XtyUv$ z3pWLZt%SKbmC}yn?A7ANfHt6o1~tnTi=p{lpfULY3it$>IPbn z7#P+g_Qchl&KyC!QO(vQ$gU6#E*;Q^3{%3aBCL)C9ZDoC64OU0Em2o((Rz2<6sKu9 z9MO}ukuaNNjFBTU#$`N6&XHaOOed*J7aoo_Yeb??^}~9Ev`F>nse^`adB{a|h!9Db zk#s7hn|7#&;?Z-FJQNfFRJ(wzAWP_D!z(GWqeJ=*YTK&$HnBhif`bX zDxSc%=xi0=#&=YF7f-7A9=@;Q2l%0kAF22;ej+vutJsV!0-w`ARq-?YT*WW&OBGLv z-mma$3GbkfUp;Fh!zj|ze=-6cZE>gJ#<0<{z=83g(VFR;$^AV z8%yb0w2L(?M?w+Gzc5v=9Pq_!gxqr~{))fJxS-{YkymBZWY`JRI;f4h2CmHYQ885z2WBV{k^-o zI$HW$yIXGV?`di75zoyjB%!kw6i89@vJeGp7oTzDGdJ(-+{*oR?*7R)K~9udtER=e z+$)6^iIgVOUx9{$ENo77f@fEk3}cRYi~`9XEUvwKPBd^ zT7(t+2(IRjh^71?<3Wvhxv-~*cL5|cvtNR(9P@?3etG71FV7%t7&!vf!1IrXFQO^Dfq;4aZ0vPBtWaH z#-NO$Z2KtGG0f;#F^2Nvc#2;$D`sUdd&kN#RCKP&U{0gA+B=T95{|*Q*mH-qX%|0rrIFuj4uE}80@(dQ!Zasr*Gg#s|kEP?N_n=5>8Kr171y@w8WWQMK zBo^_wdBD{!U??xr;K6Cf%NKBwuJkxj>c(8U@dmy)8c~iWRPxte9X2v}bY(HOqqT~Z-Nb3}41 zK8H1Z-m`d7$BJ{fu8(|QtBm4$vg6KCtQ*IRW$Y<%wu(msj~L(~t7zB)elJ4QQBvjN zWfLKQt7vnK+5#}>W;Y>^33d~qJ)aU}P)&h&f>7>|ta}9OPZb6K1_r-|B*_P#G^%Jk zMKm|;H4F-nV4I{)3-e*49tRn+Lq&<&jspyu>uxVf0t;vP5zl+2mMh}p9YaZ>QurL3 z=TUM5X7(ht&KxCap|HWNDOpKUA(6*ypnc*qcMMHu1eZ7T&BpC#vGELQ3Od|sG@sU2 V(~n8Ym*7?sR@5np|EJ-6{s;HaxR?L{ diff --git a/target/classes/com/zdjizhi/utils/exception/FlowWriteException.class b/target/classes/com/zdjizhi/utils/exception/FlowWriteException.class deleted file mode 100644 index d921793218c4dcf5363d30010e7e45c401810d13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 490 zcmb7BO;5r=6r3#|Rj7g}nt1bum{1eFVYnDMH6Fy^c`2LnNIy)wRl~pXMB>38;EyuC zEf^9xxrf<(v-4(NcE7$qJ^@^#T|*fM23j@_Z5#wZD zk0vU8l#`H|mY4W49LtnUy(Y_gMw!5+=O>Z7n9gZ2BRAI+X0Cek)w8A~c86i|`jnDZ zcfV9$pxyE2@05WZSuCdK^?xHQ)&J z{x_Mx=_d6dk2OV`v2lhHKb=_?gb87^xw_(A@LuUIA>NDY9mX2VfI7E0*yWS65;0%r p$`}~N7z|ixwAJp#64qab1}mF|!|_VBc3?gBu+JX+Vccz@`2$y3YKH&- diff --git a/target/classes/com/zdjizhi/utils/functions/DealFileProcessFunction$1.class b/target/classes/com/zdjizhi/utils/functions/DealFileProcessFunction$1.class deleted file mode 100644 index bcc63fad68bec3d1a2b399f036cf99d9eab84546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 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 diff --git a/target/classes/com/zdjizhi/utils/functions/FilterNullFunction.class b/target/classes/com/zdjizhi/utils/functions/FilterNullFunction.class deleted file mode 100644 index 24e4d9101e16708fdcb0d439810609cc5439877e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmbVKOK;Oa5dJnV6B9_<(w0Yg6sXjP)J38f)T$C7da}YH&_l&#<8GWyopt30Lj6r# zxB%jSIP;?rpB)1sIe{$A?2PC8X1?9|{^QG60DIVQ(ZEd?x3K2mwu?IMIJoQJo`ZFP z#(}XWJrt;JZXFBMo=2xzpzRr}yVIsMqNjA z>m*S@(Rr?52KKT)(tcXN+!ybBeO@$na9^O=Gl5lU7L(}BRHqW+MR6e2x$=iv4nkwk z7#K-4CZ^N?^0lGexQl;*L-biH%T{2pYajTu+9x@fG^1HtI|_2t;=<7S5QF+h9G`L-WS0)7|n59_2 vB1GpYX_ojer+G}D(=@ktzM=XNwOOj^IhrNaH3Dkvzf9;#(Rvlv3xDG$UX;-I diff --git a/target/classes/com/zdjizhi/utils/functions/MapCompletedFunction.class b/target/classes/com/zdjizhi/utils/functions/MapCompletedFunction.class deleted file mode 100644 index 3380c97a00e6f09132b28963e5e1e0e9091fbf5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1641 zcmb7ETW=dh7(EkT*4}PO;=$UuG^&L)`XNc#9ZpMsEI07eVVMNn@!fc)_RR- z-#|h<@BnXpL#j|k-w0GnL%D=!eg_Hp6^JwTHnHm7j^;7lF`j2Rd=k-!_c>Bv&*47!R1LW@Zu?fRB_Vk^q z<$_O3p&UBWzb+$B&l6)hUi9h$<7FqT+IK2T-kn9yZp5Bnw{JB9C-%aiZqLfvbXcwV zDpr+JVkK~@Dr*9#i{&NxskD6=xb|Eed4W4I&}|YBqd2mPw__oWec@eRW|;IdKPcViGX7LFxuB3FIanKM^fI=edE58xh$p zx8Wvx%VFf&vL>BHW#8hSWllVsVpYSSQ=uoqOtu9{$ah<&cvy2TY($PKc{(|Vchh)O z3v1y;95gU(;e8wvII<)5(*j!9j{^b+cRX77ml~d5(e*RF^~3j@-+jAv@BYS@4>s@K z-&nu<_xiof&wt!n|LUIyUvK>O#m3s&aI0%AoVPH8l5Rd=0!<4a;v<2+9fX!l20pfM z8D#-|lTWSJh&z%KcmK~DY*%uh>26t7UBI(=nkqqjkFsjbq zt|_KNpueJ|&&p@6XH~r}T_!3kYc&;A1V)~z?i1~q?hgN5inSwG^v}g%%OtSBxa)=L z?|KacGAfEfrnvO45nL=r(V-t73rzgzxg1z)3z-7W2K2{}Ek! zeEiZJvs~F8;>>2xl0atg5yVd%^x!btY}44wO=t$7175;W&V;TMwtDk7Nbv*4hSt!t zGW#>qzan$v5wZni6}jP6mI- diff --git a/target/classes/com/zdjizhi/utils/general/FileEdit.class b/target/classes/com/zdjizhi/utils/general/FileEdit.class deleted file mode 100644 index 56f046b4a6abc8cd369803c677ac97886e330ca7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2333 zcmbVOX>-$76g`TaNOt4^&H`p@8YnocS_*|Glomo#oH|Rf6Ux%2iX__#vSefllJs}9 z(++>4%Zy>#8Gb;2Q>WAOB!`6BLuZ-~dgq>Z?|pZB&-wH3-(LZ^jPKGoh0hh-Nuz)z z1z#vADp;1Wl7=icR>iuO!k4(Kpd^H{f_1TOq;V4W1o}$BePRDV!9%e=5}&Wr_y(J4 zd<#8A#Vr|z3{yg%<5jDcFJZ7~xLPd?JkQa{X+^I($L;I3YX>(ZB=X}M5|ZJNVWQ(4mI~%%h3%N}ugPPrxaK31Gb#2eww)bkb76!J{)T)+i`MRSm z+K#ng+5wLmGA-Q^^1APoy*0}>EH{wwLw>2atv}T@M|Z1QDe!H#I#=jIby4fo`hU!L zr$WRF34IpS3AvkY8a1n~mvA>SEq*Gv^u+!|o^@=Xixz@#Xr&agEbf420<>f}c z`Wn6!=X%|6+S8aWc_HUR7BNIKqWmh(;vG)vopO1NMNm;ijbbgRGl%5z%|elV zu!L~@-`%RBfv#?CTLznOh>EWS z`*NW5y6qe%>q)3PyoJMuTN1mO8-G9rz0t5-&hhkNh4ww`>`=Q#ysvMB&NS+tt1UX- zvwOZBSo5A+v8ycE>S}4Tv~YK0;ciL7>HN~$Jf6-M-nOj--hQq_`A$WKbg^3s-N)6@ zn?b=ft({fgi#KYspE~brsu^xIqZdcQNWRb|Iv#qivxS~-+OF>JYRk8;tc&-KuIlEM z1=on4&l4Rl?V@f3p1;e<@kdWkvi{Ekx6xJrVZcme4b zf*zUxeG#c*j985oa1Q4wrSKjuP-~PvH;}*px#!YsCfA?sX(90wPsA@*ut@&8D1hv=_Hc^vXlmq!4QsNgq1nYO5~z6_n0VC!A0b`3N(%hCMwV*rf4V7 zG`VDiX2|tMNTY@D{T%OeSBcOEM5zc}B1%W-L!$l&T_#fL@kd-C%HSiiDfIk>V=}I0 zaE)S;RsWdeEar$t$t==9gflRa&9?a4J309(XCw%P2xIK1t5~`2_c=4CfWxr)7L5Be*UEpUrSp zg8N*CD;C`6#qfoUXrAC6%y0_@_r)|PyQUrzqKCcL(?7wD$@o$c9>JqNJm$v|d|3>S zi!V>eIPJ#@obus}pihe7DKR|lM=PF@@f9DwD&uQ@d>zmFaTee3V=bQZ;d!zAn_~Eu zuy#(y3xfH!4=;-4=Y1G2#s$3Or!bjzaCw>FCVZImV-ue9<04)bi!KTAlpmMzii|5_ z<5R-jtA4zS?}%@&Nhmb!fdM@xVP0F<3JxY5+ctxg1>5X_%@Sm1L?5=pgA$}x2_?<8 z6?Zht>Cw!DET*C6UupJE^j_fxM4;sOQW0>*afNtqA%?x%~_DH{}4e6l> z@tS+swuf|mSdZ-%S`t>xvNWp`+&fL1>kAtU%WxVcEU0VSuN~Bare+NUyPTL|4Qy^* z(IdgrY)9x_X`5l`?TKig9_!ZnOiBW6c33lew3s3Iw6NHT4(ITfLX0C-7w6gTOjrWY zmP28E*fDI2PI#O_gRU26{R|BY^E3RR7y01Q8?H6&FaxmqU5~xpi1S2!2}h66=^<`e z(&Z5NUD~kgH_KSYcUfJ`ei`2*ES7%A2}L9n)U9A17G+a_D~WSEzwR=nbkV)&34_KD%6!syDGMzcW)-hiTv?<@EL z4iKJ*5f`||*9li&R}dHeM!>_o=f)szOBiNE)PH#{lY^=1QSd|jNDOZ%_%VK>;HUVR zgqoa%kZI}zn%NW^NJLrn*%XqnE@eRtMbxlnEqByDT^)$&8aspP3~H8I8&U0;YU=TL zieF2dbA~(m_UmCs#?KY}0&g-E6#Npu5{LP{xYm^_DGL8XFr0G;fKLZD^oC#%~q;4!>7$ zKaME44@V_5H;ZaeqxL~PqV_StN3>WZzD89$_5MVhC9OKPnn_R9h^YMph0sLZT-L+3 z6^YCEgMvQ_lYIy)_!y4J_>+P^<1Z5G-z`0+_Z9_z#ouK7UBTP*8se!A!&@K+ zOZQ;R9!a&9n*4n@kJ?snhiQ-Oi5ZU0JE7m8wer0k9e201+|$yzudAiAr=_!tjdPYR zmREo2z9vepP#YfBEmr92S(fD2Y-&w9ZCSjFS?@DU=05uzJ9D=A(`rAxH;X-LM~wc_ zcDJqGq{Hl^b8|?EHo}f`P+W=~{RDBkOX)6C$lyjbUTSyFa>9G_j*!a!%`;EM(^kx~ z)`c%&r5kU)!vD3D!>4@4tuMjr=DCErd|PR}W^M7Z9yI%X`VQ%V&8Xc{cJauaIX? z&+?_@+1|5!fIK_>G@eaA%P-(}_WvwjNuF0hmS0Sd*uY%h*uz}PTf(KhC`cDUBhC2V z1ixq(l>0^BCoQA}7CkivdBAq~AoEqdw0;s&{d~+x!b9RsLMHJg;U`g&m`hTcL^(+y ziTNo~L9!r;g(Q_p+(NQAiTBnQB~it>nncYMmh_HeX`prz%Qkr`Jrh_yj=CwV=$%A; zVC4i>sS{W|fi;{4H+n0)C%N0$8Tcx^r*Z2P*7gS0d0xT#-U7-m;(c8gv0)OoT~+A~ z)r!=jv5elvj9zJ;UOg=)aeF;|xkK!J=UFst@{VJ3#)SsDQ0bk(mOvwCbfkd0y^OmG zkXA3*ROrqs3$LDshZw$%YkXUiN|i+Onp7^RR4Lu!@&zy`y$@9!9qKP;epNGu%TS3` zP_Yinu@P&q8Mk388qk7fzQ$Xb6CJ#hdXS*y5!yI}lNiMq4&wzJ;k*6gcne3_>+k3O zC-5(Ry@q4>H;zl?yu=pZBzHd{siaHr0QPhDMn?K1b7cr7ywt2k6c%TUHEcH{#B3M` zm!?yvHZAUsdd##+eN>4aCtK^Y?+8HcD_SyFi&^FS^mgd}6sl5w~QHR4`M z<(4#$Iafd{PuEXi>(=_0P*bHBjXjCV)O0?Y7(At3a1&_WS|uiws8iU~8`z!-XG%32 z(Uz;OVC-=$6YHw{8guTb$Tu=Y6wl9^I}2Yb6RVhqRm^O?Y~d)??kJl#dW`h;vSOE3 z9Xm%KQ*qmf63!naN)O>yJj|#)f*>A66COhwPP6jQ5V@y_=rfGavy95~IF55J-V2Bx z&zi>8izoP1)S!X2l=6siP z&UZQAd(OW6zo(xAFbhY6n2doSVi;6m1+fs9mwkwzv+nIp8a z8aAldD0DZe*c?O%0~)Rr-z}oss^Kc}y;{XJmADq$g18Rf)bK6wyI@iSBOE-6Oht zMR%X*ejvIZif)hSeiX!B{I~-5;{mbMkctNt1mboqW~LQP=!zu6gIUM6<6-i`U3P4q z0(Gt3-(_VS1+`skjSWUP>saydqIBBWEZEej=&@o+!^x&i1x=-N=3nY^<3=(T?s3vq zGB$4kCkEzQNy}NFpsb;BwE};K9pw_$T~^ZU&L;ZJbg$7LC#R;%ju`RPM%ogz$Midc zRz^WXSHw<)uZ*s>t{k+aZJBV)OqyvU9_~#W$;?taomgR{xZU`uX~aA1M8Zz4Ff$n= z#-&eg7;9SNSe62f5m{}-v(g+H2kFgu{cFvL2tu`yN}0)MuYIn$x!Xv5PR(`f6f zC3c~WY9jCUq|p)GoXSUa_ULuz7cJ=dP{i?^7pWZA;~0^3v_xiyHKgJp7KVb#yq7&D zk5IfsxJU0euW0=*+_6ZaRTFJtTX$p zD5DZH?LI5j7d0Kjiu0Tc+Q_i5sys==W;LWY6RR?&)3?E`7OyrSdRcvZ)5@LLtH>3AK#)A4(B>iC1`{wTUPM6UiMMsJGl&!T%v@ZQE>bli@= zs(44oyZD=m_jJ6EZXJKe2gI?jhJwUWX`00F}UI7w9lX*(ep`90^9Sf{ASI^sqqGp`t(y&@xAj(AnL znOJ64!NW-n-n>zs3rrj|GTr7TViPYR+U!qCVq#u@G|HbeHYx&=!@`S|Mml4<(b0Ia zyvt&?=abx5Aa#*LuHU6S(jB`vG^6e*&+Xz!cuVn4buSnNttEmvc7|8h48$n?FWg~7 zUvuny-bM$jV9NM0&k5diW;!iSTtf-#im$x90elu{%+R3wG+>IB(?xTA)`;_x9ChyU zGnm6u#%5{slb~?%5+9rn7i4;gG4c>}@=!>GIFFDpp`o)lXrh`KD~%}P<+tt2^IMeh zypeQk#uppelSjAZ1h=4Tx?>8WX4J9ttPxI}W7^A8OFaA&z(&R*fq>O{VMhT1BX%-s zxepJW(q22Y#KXKw7xPxQkSE?M-mucjh|}o#th@NP*u%avOXRYI&qb`l5&4p-o?dYV z3RCOGoUWxtglI;PFQZrDbTpQH&`vK7JjZ+vhL^_ejTfc~7aewTz={#idpee#y<$<{ zvfkd63_BO>bf3XXiCN1WhflD^5^j5z%3?17(L9{U-v^WVL&JwD;(FyMD6VYY#0w>N z5&RtUrf0u|oG`zJlcr^20D}R%PF&C#}5ze5$vvDrk za53g!4bJ53cFvv;lcBtYvqe1C(C1m0LA@>pb1qK63Us5K^XqUPc>!uoz)JE|>Qv!; zjx_FcDlR||%DC@J^kNlbXp*}c7s~kVz(v#pcXlK0YF$FvrR3DY|0(KJtWj~<$LRPN z{>3UTXKwk}qO(j!*+H71G4YQzwFi7{YJFfB^^Y(~!tHT)zP)`fzaI@Xzt_O;w&8mw zKS0^ZFAv@M3F+HEo{@QzwEvSO4Y!is!zt7FeSgmWzFvM`ShA&AB>(lUkDA}5-kgD( z9&I80cswxeHGbD8vTvP2erE5BUXskn}W3?<*Jd5b3W; z`rd$`cac6`(zmFBzLE3^lDgn$zAhQ(hUAnbWSk@! z?V$>>#u;SHkc`GqP%x&Gak6C8g(?MOJQ=4*h8oh_)LQjnx~QySC;oJ{#cUU{^|NhZ z+sU?%?OC>0*xq6LH|J1SnZdTO^#wHCrA%sW$)Pa^mP_-Hq6v!sn}_gez5fXQ)A|zr z)!b6=A4Y2qr%J&GLhvpHZx;k%DR@N)j!^JoL2#NB9H=ipf_-GNu(pMx zy{)-L*4^onwT+8hCA2mbR$_s2>Y!jo3d}PkvqvzyIi<58m?Z`6LNME7%H?P0&?ZI4 z3(*v@bFC*A#?6tkGJ!d6ZKg4m<8EaqRw{SneB~jmA|kC;p2S7UAzZAyip!KYaJg~} z{mMTPQ9eV==f|M03US{ABz)7b-Zvd--)Y$3n~ROU<=Eou##Z0uxYifLHs3~E@7szS ze0Shx-#yswdlWk$>UjYxmSrO=mLx}Rb&8RwY+?yVqO!~6$gO+96O~HV%#L!K8>8HT*Lf7=yMTG diff --git a/target/classes/com/zdjizhi/utils/general/TransFormObject.class b/target/classes/com/zdjizhi/utils/general/TransFormObject.class deleted file mode 100644 index dd96b165555bf99e481e52107a9ae207e9e23106..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4818 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 F{s)7qMfLyy diff --git a/target/classes/com/zdjizhi/utils/general/TransFunction.class b/target/classes/com/zdjizhi/utils/general/TransFunction.class deleted file mode 100644 index cfa0b6ef0f6bf766912cecc3a4bea4c76cf5f83a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7759 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 diff --git a/target/classes/com/zdjizhi/utils/hbase/HBaseUtils.class b/target/classes/com/zdjizhi/utils/hbase/HBaseUtils.class deleted file mode 100644 index 87afd872dd71320e3e76af6d4c1e47c7b05f6297..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8565 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 diff --git a/target/classes/com/zdjizhi/utils/json/JsonParseUtil.class b/target/classes/com/zdjizhi/utils/json/JsonParseUtil.class deleted file mode 100644 index 7254b7a40ca12d58fd334c9b5414146788106a9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8639 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 YD3%kQfCjb5RFcp%_WTq3^YG9A538t>5dZ)H diff --git a/target/classes/com/zdjizhi/utils/json/JsonTypeUtils.class b/target/classes/com/zdjizhi/utils/json/JsonTypeUtils.class deleted file mode 100644 index a543fe3b4c4b49a1744bc493e8ee1e460b3fc119..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4732 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 AwEzGB diff --git a/target/classes/com/zdjizhi/utils/system/FlowWriteConfigurations.class b/target/classes/com/zdjizhi/utils/system/FlowWriteConfigurations.class deleted file mode 100644 index bdd4ab6509573da83e792f961b1995cc902fcc57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2699 zcmbtWYgZFj6x|cR3FAm0JVc}_QYjBHKB$0D6(VRLf;EEGKI{-KFfh!-$pn1#@iV$s zKlNMtQQNg5t6i%VCcium6e%u&pmgaeb3$ZB!B$*>+b+Y@U4cE7}szO z6OCxaq=puJB(3YxcSAmIYM8>be55tp!i;>(HsUt!NGlV^oQ8R1HQdF5ibaVquHv4C zk8wYaoQ4NjlFsEg9;*06#UmAu6*LxHr!a4n0cY#$fRkT-gO0a{R7Ji>eJ3Dy@{-8i-pqmif|toD;7P;tdlpaWy3Y)ICR!~ z8)i|#^^i&Poy1t&0H_JhG#mqq|vf2yqxEn z_Ik+fxq|WjfV5@U>#2_R}Lb#_U^5ViOscY{}s+u@Kw5$`|t!HP~qw*!c$R_3w9K=9VTuC z7vEKgDt2`|1I2Nw7+i@bYn1Ghyf4=a@~Q+EN5u;rFY%R*uknq76RTp)C|O=@ASLK? zGo4gsu~J0^UB1^>_WhFWncE^V*<77mT-g+PZy&{vj|8?<14EJV6iwS(Hmnj)hL4lw^lzD3R+erdQAzE_rKyU>TSA19_6apD}2%RnXF8^Wggk z6xmbw?BOWIx59VB;2S8fX~b|g3<8?aOIr^D@IKCQ)QCQO5H5BY9iy*ju#DLEIQlc{ zhRUdaC5QDt$Z>-|R$eiv&Ij&51MPOG=s*I;`ROE^EOKW}eF~wshR7Kb=^>r7EKM(yor@3|t`HeMNTj`; zL{hl;Z$#pIXsjjTduxaclE@H=oF|cCTB-j`?#S4^6%Angk+{tt<1q{_4Xo;D;2^0L?KAQP5p+J zM{kh)1q~Iej*OG7Wwa&R%jhWMIN1f`&S3l_^m&CV_^o@*-L~=n;V4do@2*f|eLNnZ ynTl`W%nb_nCgW}~atdRZ#w618%=qM`xW`Cvgd2meG!?O36<6b&7^N$QvA+Q33X(kl diff --git a/target/classes/com/zdjizhi/utils/zookeeper/DistributedLock$LockException.class b/target/classes/com/zdjizhi/utils/zookeeper/DistributedLock$LockException.class deleted file mode 100644 index c9e6e98c67677641415ab87a8e0d6c4091244314..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 973 zcmbV~+fExX5QhJOKp+GNhj47mDM%bzmJ4pGRJ~{bi7Kkp0=ah*ix@UG+V!?o-l`XX z0Eq|aL!pk{3IYhJVK2O%8TIT3Tmiv*ys|ld_=0wU< z83o%awvnnPR@Td=c2eYxACy-1BjM9ZM?1^M;=2e!p^t)nmefbZ)e0e1GIdE9E-Nj+ zB+aUf4n#HN%qSnnID(-#{+CQS(+uUT?EI|BQ_HM`?4H&#Dup7BC6|kx_$oZmVm|VR zKQT+#c`@&uRgau+yNUY>A+v9is3v!n!ykWi@f*%i76Zs;F^EMsETvH(yziiU4_OH_ z_mtlfZBm^~*2H@i^p5XDoP*3@$Ljx%t1#F^W7#ywS^&pG{zr n<(&M~v+~`Knd{7E=7z6zQ+W_}N diff --git a/target/classes/com/zdjizhi/utils/zookeeper/DistributedLock.class b/target/classes/com/zdjizhi/utils/zookeeper/DistributedLock.class deleted file mode 100644 index 06610f2ca59fe0a2735d1de6a3deb6d1723ca39f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6206 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 diff --git a/target/classes/default_config.properties b/target/classes/default_config.properties deleted file mode 100644 index 94c70a5..0000000 --- a/target/classes/default_config.properties +++ /dev/null @@ -1,50 +0,0 @@ -#producerԵĴ -retries=0 - -#ĺ˵һBatch֮ãBatchûд뷢ͳȥ -linger.ms=10 - -#ڳʱ֮ǰδյӦͻ˽ڱҪʱ· -request.timeout.ms=30000 - -#producerǰbatchз͵,δСĬ:16384 -batch.size=262144 - -#ProducerڻϢĻС -#64M -#buffer.memory=67108864 -#128M -buffer.memory=134217728 - -#ÿη͸KafkaС,Ĭ1048576 -#5M -#max.request.size=5242880 -#10M -max.request.size=10485760 - -#kafka SASL֤û -kafka.user=admin - -#kafka SASLSSL֤ -kafka.pin=galaxy2019 - -#kafka source connection timeout -session.timeout.ms=60000 - -#kafka source poll -max.poll.records=3000 - -#kafka source poll bytes -max.partition.fetch.bytes=31457280 - -#hbase table name -hbase.table.name=subscriber_info - -#ʼĬϱ -mail.default.charset=UTF-8 - -#kafka source protocol; SSL or SASL -kafka.source.protocol=SASL - -#kafka sink protocol; SSL or SASL -kafka.sink.protocol= \ No newline at end of file diff --git a/target/classes/service_flow_config.properties b/target/classes/service_flow_config.properties deleted file mode 100644 index bb7a28b..0000000 --- a/target/classes/service_flow_config.properties +++ /dev/null @@ -1,72 +0,0 @@ -#--------------------------------地址配置------------------------------# - -#管理kafka地址 -input.kafka.servers=10.3.60.3:9094 - -#管理输出kafka地址 -output.kafka.servers=10.3.45.126:6667,10.3.45.127:6667,10.3.45.128:6667 - -#zookeeper 地址 用于配置log_id -zookeeper.servers=10.3.60.3:2181 - -#hbase zookeeper地址 用于连接HBase -hbase.zookeeper.servers=10.3.60.3:2181 - -#oos地址 -oos.servers=10.3.45.124:8057 - -#--------------------------------HTTP/定位库------------------------------# -#定位库地址 -#tools.library=/opt/dat/ -tools.library=D:/dingweiku/dat/ - -#网关的schema位置 -schema.http=http://10.3.60.3:9999/metadata/schema/v1/fields/proxy_event - -#网关APP_ID 获取接口 -app.id.http=http://10.3.60.3:9999/open-api/appDicList - -#--------------------------------Kafka消费组信息------------------------------# - -#kafka 接收数据topic -#input.kafka.topic=SESSION-RECORD -input.kafka.topic=PROXY-EVENT - -#文件源数据topic -output.kafka.topic=TRAFFIC-FILE-METADATA - -percent.kafka.topic=PROXY-EVENT - -#读取topic,存储该spout id的消费offset信息,可通过该拓扑命名;具体存储offset的位置,确定下次读取不重复的数据; -group.id=session-record-log-20211018-A - -#生产者压缩模式 none or snappy -producer.kafka.compression.type=none - -#生产者ack -producer.ack=1 - -#--------------------------------topology配置------------------------------# - -#consumer 并行度 -consumer.parallelism=1 - -#转换函数并行度 -transform.parallelism=1 - -#数据中心,取值范围(0-63) -data.center.id.num=0 - -#hbase 更新时间,如填写0则不更新缓存 -hbase.tick.tuple.freq.secs=180 - -#app_id 更新时间,如填写0则不更新缓存 -app.tick.tuple.freq.secs=0 - -#--------------------------------默认值配置------------------------------# - -#邮件默认编码 -mail.default.charset=UTF-8 - -#0不需要补全原样输出日志,1需要补全 -log.need.complete=1 diff --git a/target/test-classes/com/zdjizhi/KafkaTest$1.class b/target/test-classes/com/zdjizhi/KafkaTest$1.class deleted file mode 100644 index 94894f7609bc8729637b249fd89d89efdeb35b6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmb7D%Wl&^6g`ud)6{KgAPMDJAb=AhCRFT#*hEDFT#!gr39*_?ril~B6WIJmoiC5d@0DHCyT--|O_9y`IDGi`{|PRzX<4(IBYyntC{LRp@As;htq{zsto) z$e!YZ2+F1FC@&27$k&~*R6c*Cr1m>oDij?NiiX`6PX%{{*X5hfq#8v`ji~qRa1LSE z_SjshNV_0ZkvXnA&;b?OE44;9Zu1DazKSv=+hjr&^aNc3W9RIUMCW(VoQ(r#-Y|O zcXgNBx=Sa$dML?|R=%%&2Fp53e6ZGRUaEyUGIVmoUFkl-<$!kgcXWNQLNG$ZQdnZl5DB=6@>{B`DE%dQje3h)<>k1i0G1t=$2y` zrylAkVk4$qpKYDf5()A+9+xWN1Pat=G2YLL1T2x8z)7r;P0<@XO_ZP>=;e{6fqnvE CP3iam diff --git a/target/test-classes/com/zdjizhi/KafkaTest.class b/target/test-classes/com/zdjizhi/KafkaTest.class deleted file mode 100644 index 00972d6b287e756015dfdff4adb7f2cac2767e2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2220 zcmb7Gds7=#6#p#=%_WU(SRSRd+R)NA5ZFx+5eTA`O0A?V5(KgMxY=Bih0ShecZ0%= z-$4J;4^nkTtjzcU{7{bP?k3?8X4?L9_uO;O^_R+rnM4xaSE^!6nP7RD`Rb zuVC1Ewc$ICr4vstIF&pd&zrXCFDQtlM>iBimz*-$xLPo6@w8DZ33r{BEaIpI$Kcim zcTKr(GNXRgBp25ThEvlI%e&@b)znw`&K_SEo=?`JHE!Ap2Gh?AyL_MP7Pl*U(RWR| zk`LT*w?YQ`E;v>Yue(lNxV|aF7z_ITxJIe0dtgL*5hwKuRc-x*jZXMw!MxnT&;8_8y~3I@`n7iNRa(}lx) z#EVYDHN>(h(ZA9LRg*X-kj7{NW5_7z4}d*~i-O*gL51w^i32HTa?3oFP)-w)T8N|;AgNJ`YmVI(;=W0{FqOqqiphO$ zHAGuX+KO^xkGv~6x|Ju4hHLr<8YRSc49B9vD;5ici04@v-NN%7S7;U$n{=Qc^Kfo^ zB{ws%TIHUY-1fank@73H%iNcn?Y7FU^l{coom${~$1M~16>jk#4koj?St?iQ%6A(c z;d9p6#4DVgQVQIiw{+q#*$hWJVU2bcX8@^gIQEW7ZQ)r<0Y!1#mFmJS*B#ULHM2}L zZ0?vLCK|UY4q;fWDS!gK)9m@04~nN%__A!O3bLGY){L-*Jbx_%>~3lp?n3YbY~L?=Q463x=C2RTdj=?8M(tKF z{fXFSMrCSGNW@#jWi=6U-cqlG#8ovJ61}P#5`AiaNDQ<%gDql6y)KWAabqiUgtwoJ zALHhh`i}bU5pEqLMgE6h;&ud^<1cYXfs7>*#PR@1qWi%xfL;s|5Z7=ALli*@@8dQW zX!nRUl{oViVWqna4)%9AYK2 KI!)1+F7-dyKTui# diff --git a/target/test-classes/com/zdjizhi/LocationTest.class b/target/test-classes/com/zdjizhi/LocationTest.class deleted file mode 100644 index 8478cf716d8e66b9d771f86d7844d8d8770eaa84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1497 zcmb7E3r`b45dO9W?x;tB@)AT;L~KFsdbO0c;Dd(`q$*lMq9HNY_5zF7yXJ07BL7NF zYNClhz#nCtEfv~`uU;~roAc92|8L5|4WTnoj$V#pEcdzS~CQmwkKCz=72X`tZw`^I6N zC>gDIb*1dIC`O82-7nh@xg<2$o>f1zjw}u1m{72)VGZjV#&D5AOQrQx+SE-mr6(0^ zXn25!3La^Aj7|$nR~L*@f)`E3i|0BG@n1tg^jVv4k}CckM!d-IRO`QQ|mB{N@NGOCVfgc6r4@cI5Bn;oTlZYK=~?3T53Stia3CTIHXW1p%U$BlUnJfc3e3Q5$W_0q*<`MEMnnu@lr(2|nz;H}AdK@$CNibMy_secaQL#U&jXT+ZSO7Ia+2 zH67P+BZHe6ENZx=p(K!gpgJmiD3C0bHw03T{cT4eS5+P7S%s$Wb>rzuwL4#w&g2nyRy@=Yhj=|t=0H6 z8MHWGm{1lFtXSi7R2l?%K{)b?b4=BSo6@5vF$Rn->Gn>2MK2`Y&@rgkKCfD=;#57}L z80U~@mc?0EM55uB>`rpeiRw}xiM7v2E`LGlgvLUOWsPkau36IQG3CNw3HujgeQ0Ti1d_4V>6pyqa73RU(QM*8$$$%Suh7YI JkzoS!e*raMz)}DJ