From 0ae4e5c690733df260a6a643b4452e3906c84d3b Mon Sep 17 00:00:00 2001 From: Christophe PARAGEAUD <cparageaud@ippon.fr> Date: Fri, 6 Apr 2018 11:45:43 +0200 Subject: [PATCH] final version --- .idea/workspace.xml | 661 +++++++++++------- README.md | 16 +- pom.xml | 10 - .../fr/ippon/kafkaLatency/model/Person.java | 26 +- .../AlimKafkaAsync.java} | 251 +++---- .../AlimKafkaSync.java} | 258 +++---- .../streaming/KafkaContinuousSpark.java | 50 +- .../kafkaLatency/streaming/KafkaFlink.java | 18 +- ...fkaSpark.java => KafkaSparkStreaming.java} | 36 +- .../{KafkaStreaming.java => KafkaStream.java} | 53 +- .../streaming/KafkaStructuredSpark.java | 18 +- .../fr/ippon/kafkaLatency/utils/Config.java | 16 +- .../ippon/kafkaLatency/utils/UtilStats.java | 50 +- src/main/resources/config.properties | 9 +- src/main/resources/log4j.xml | 24 +- target/classes/config.properties | 9 +- .../fr/ippon/kafkaLatency/AlimKafka$1.class | Bin 588 -> 0 bytes .../fr/ippon/kafkaLatency/AlimKafka.class | Bin 8102 -> 0 bytes .../ippon/kafkaLatency/AlimKafkaOptim.class | Bin 6706 -> 0 bytes .../streaming/KafkaContinuousSpark.class | Bin 7957 -> 7741 bytes .../KafkaFlink$TimestampsFetcher.class | Bin 2352 -> 2398 bytes .../kafkaLatency/streaming/KafkaFlink.class | Bin 6186 -> 6197 bytes .../kafkaLatency/streaming/KafkaSpark.class | Bin 7953 -> 0 bytes .../streaming/KafkaStreaming$1.class | Bin 1662 -> 0 bytes .../KafkaStreaming$MyTimestampExtractor.class | Bin 1936 -> 0 bytes .../streaming/KafkaStreaming.class | Bin 3250 -> 0 bytes .../streaming/KafkaStructuredSpark.class | Bin 7998 -> 7889 bytes .../fr/ippon/kafkaLatency/utils/Config.class | Bin 2298 -> 2298 bytes .../ippon/kafkaLatency/utils/UtilStats.class | Bin 3457 -> 3578 bytes target/classes/log4j.xml | 24 +- target/test-classes/LatencyTest.class | Bin 3074 -> 0 bytes 31 files changed, 831 insertions(+), 698 deletions(-) rename src/main/java/fr/ippon/kafkaLatency/{AlimKafkaOptim.java => producer/AlimKafkaAsync.java} (76%) rename src/main/java/fr/ippon/kafkaLatency/{AlimKafka.java => producer/AlimKafkaSync.java} (78%) rename src/main/java/fr/ippon/kafkaLatency/streaming/{KafkaSpark.java => KafkaSparkStreaming.java} (73%) rename src/main/java/fr/ippon/kafkaLatency/streaming/{KafkaStreaming.java => KafkaStream.java} (56%) delete mode 100644 target/classes/fr/ippon/kafkaLatency/AlimKafka$1.class delete mode 100644 target/classes/fr/ippon/kafkaLatency/AlimKafka.class delete mode 100644 target/classes/fr/ippon/kafkaLatency/AlimKafkaOptim.class delete mode 100644 target/classes/fr/ippon/kafkaLatency/streaming/KafkaSpark.class delete mode 100644 target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming$1.class delete mode 100644 target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming$MyTimestampExtractor.class delete mode 100644 target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming.class delete mode 100644 target/test-classes/LatencyTest.class diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 47feec2..7dbfee8 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,7 +1,40 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="ChangeListManager"> - <list default="true" id="b73c7a62-507c-4776-b197-5964d0935e98" name="Default" comment="" /> + <list default="true" id="b73c7a62-507c-4776-b197-5964d0935e98" name="Default" comment="final version"> + <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> + <change beforePath="$PROJECT_DIR$/README.md" afterPath="$PROJECT_DIR$/README.md" /> + <change beforePath="$PROJECT_DIR$/pom.xml" afterPath="$PROJECT_DIR$/pom.xml" /> + <change beforePath="$PROJECT_DIR$/spark.jfr" afterPath="" /> + <change beforePath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafka.java" afterPath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaSync.java" /> + <change beforePath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafkaOptim.java" afterPath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaAsync.java" /> + <change beforePath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/model/Person.java" afterPath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/model/Person.java" /> + <change beforePath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.java" afterPath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.java" /> + <change beforePath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaFlink.java" afterPath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaFlink.java" /> + <change beforePath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSpark.java" afterPath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSparkStreaming.java" /> + <change beforePath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStreaming.java" afterPath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStream.java" /> + <change beforePath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.java" afterPath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.java" /> + <change beforePath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/Config.java" afterPath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/Config.java" /> + <change beforePath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java" afterPath="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java" /> + <change beforePath="$PROJECT_DIR$/src/main/resources/config.properties" afterPath="$PROJECT_DIR$/src/main/resources/config.properties" /> + <change beforePath="$PROJECT_DIR$/src/main/resources/log4j.xml" afterPath="$PROJECT_DIR$/src/main/resources/log4j.xml" /> + <change beforePath="$PROJECT_DIR$/target/classes/config.properties" afterPath="$PROJECT_DIR$/target/classes/config.properties" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/AlimKafka$1.class" afterPath="" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/AlimKafka.class" afterPath="" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/AlimKafkaOptim.class" afterPath="" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.class" afterPath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.class" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaFlink$TimestampsFetcher.class" afterPath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaFlink$TimestampsFetcher.class" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaFlink.class" afterPath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaFlink.class" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaSpark.class" afterPath="" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming$1.class" afterPath="" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming$MyTimestampExtractor.class" afterPath="" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming.class" afterPath="" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.class" afterPath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.class" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/utils/Config.class" afterPath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/utils/Config.class" /> + <change beforePath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/utils/UtilStats.class" afterPath="$PROJECT_DIR$/target/classes/fr/ippon/kafkaLatency/utils/UtilStats.class" /> + <change beforePath="$PROJECT_DIR$/target/classes/log4j.xml" afterPath="$PROJECT_DIR$/target/classes/log4j.xml" /> + <change beforePath="$PROJECT_DIR$/target/test-classes/LatencyTest.class" afterPath="" /> + </list> <ignored path="spark-chess.iws" /> <ignored path=".idea/workspace.xml" /> <ignored path="$PROJECT_DIR$/target/" /> @@ -23,8 +56,8 @@ <file leaf-file-name="KafkaContinuousSpark.java" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="288"> - <caret line="33" column="34" lean-forward="false" selection-start-line="33" selection-start-column="34" selection-end-line="33" selection-end-column="34" /> + <state relative-caret-position="364"> + <caret line="89" column="24" lean-forward="false" selection-start-line="89" selection-start-column="24" selection-end-line="89" selection-end-column="24" /> <folding> <element signature="imports" expanded="true" /> </folding> @@ -32,11 +65,11 @@ </provider> </entry> </file> - <file leaf-file-name="AlimKafka.java" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafka.java"> + <file leaf-file-name="KafkaStructuredSpark.java" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="413"> - <caret line="78" column="0" lean-forward="false" selection-start-line="78" selection-start-column="0" selection-end-line="78" selection-end-column="0" /> + <state relative-caret-position="296"> + <caret line="88" column="22" lean-forward="false" selection-start-line="88" selection-start-column="22" selection-end-line="88" selection-end-column="22" /> <folding> <element signature="imports" expanded="true" /> </folding> @@ -44,22 +77,26 @@ </provider> </entry> </file> - <file leaf-file-name="config.properties" pinned="false" current-in-tab="true"> - <entry file="file://$PROJECT_DIR$/src/main/resources/config.properties"> + <file leaf-file-name="UtilStats.java" pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="90"> - <caret line="6" column="14" lean-forward="false" selection-start-line="6" selection-start-column="14" selection-end-line="6" selection-end-column="14" /> - <folding /> + <state relative-caret-position="435"> + <caret line="29" column="35" lean-forward="false" selection-start-line="29" selection-start-column="35" selection-end-line="29" selection-end-column="35" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> </state> </provider> </entry> </file> - <file leaf-file-name="log4j.xml" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/src/main/resources/log4j.xml"> + <file leaf-file-name="AlimKafkaSync.java" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaSync.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="60"> - <caret line="4" column="0" lean-forward="false" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" /> - <folding /> + <state relative-caret-position="690"> + <caret line="124" column="21" lean-forward="false" selection-start-line="124" selection-start-column="21" selection-end-line="124" selection-end-column="21" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> </state> </provider> </entry> @@ -67,18 +104,18 @@ <file leaf-file-name="pom.xml" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/pom.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="390"> - <caret line="26" column="0" lean-forward="true" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" /> + <state relative-caret-position="975"> + <caret line="65" column="21" lean-forward="false" selection-start-line="65" selection-start-column="21" selection-end-line="65" selection-end-column="21" /> <folding /> </state> </provider> </entry> </file> - <file leaf-file-name="KafkaSpark.java" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSpark.java"> + <file leaf-file-name="AlimKafkaAsync.java" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaAsync.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-225"> - <caret line="39" column="73" lean-forward="false" selection-start-line="39" selection-start-column="73" selection-end-line="39" selection-end-column="73" /> + <state relative-caret-position="394"> + <caret line="123" column="21" lean-forward="false" selection-start-line="123" selection-start-column="21" selection-end-line="123" selection-end-column="21" /> <folding> <element signature="imports" expanded="true" /> </folding> @@ -86,21 +123,50 @@ </provider> </entry> </file> - <file leaf-file-name="UtilStats.java" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java"> + <file leaf-file-name="Config.java" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/Config.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="207"> - <caret line="33" column="45" lean-forward="false" selection-start-line="33" selection-start-column="45" selection-end-line="33" selection-end-column="45" /> - <folding /> + <state relative-caret-position="394"> + <caret line="34" column="53" lean-forward="false" selection-start-line="34" selection-start-column="53" selection-end-line="34" selection-end-column="53" /> + <folding> + <element signature="imports" expanded="true" /> + <element signature="e#1288#1289#0" expanded="true" /> + <element signature="e#1343#1344#0" expanded="true" /> + <element signature="e#1457#1458#0" expanded="true" /> + </folding> </state> </provider> </entry> </file> - <file leaf-file-name="KafkaStructuredSpark.java" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.java"> + <file leaf-file-name="KafkaStream.java" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStream.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="1340"> - <caret line="93" column="5" lean-forward="false" selection-start-line="93" selection-start-column="5" selection-end-line="93" selection-end-column="5" /> + <state relative-caret-position="186"> + <caret line="76" column="75" lean-forward="false" selection-start-line="76" selection-start-column="75" selection-end-line="76" selection-end-column="75" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="KafkaFlink.java" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaFlink.java"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="193"> + <caret line="30" column="12" lean-forward="false" selection-start-line="30" selection-start-column="12" selection-end-line="30" selection-end-column="12" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="KafkaSparkStreaming.java" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSparkStreaming.java"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="300"> + <caret line="72" column="5" lean-forward="false" selection-start-line="72" selection-start-column="5" selection-end-line="72" selection-end-column="5" /> <folding> <element signature="imports" expanded="true" /> </folding> @@ -125,7 +191,12 @@ <find>UtilStats</find> <find>add</find> <find>bean</find> + <find>total</find> + <find>stat</find> + <find>producer-topic-metrics.record-send-rate</find> <find>Stats total</find> + <find>596</find> + <find>max=596</find> </findStrings> </component> <component name="Git.Settings"> @@ -139,29 +210,12 @@ <component name="IdeDocumentHistory"> <option name="CHANGED_PATHS"> <list> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/UtilStats.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTimestamp/KafkaFlink.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTime/KafkaFlink.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTimestamp/kafkaContinuousSpark.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTimestamp/KafkaStreamsTest.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTimestamp/kafkaStructuredSpark.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTimestamp/AlimKafka.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTimestamp/kafkaSpark.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/UtilStats.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/properties/PropertyFileResolver.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/properties/ApplicationProperty.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/properties/ApplicaitonPropertyProducer.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/Person.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/properties/Config.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/KafkaMetrics.java" /> <option value="$PROJECT_DIR$/chess.log" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/Config.java" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/KafkaStreamsTest.java" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/kafkaSpark.java" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/KafkaFlink.java" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/kafkaStructuredSpark.java" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/kafkaContinuousSpark.java" /> - <option value="$PROJECT_DIR$/pom.xml" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/StreamingConsumer/kafkaContinuousSpark.java" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/StreamingConsumer/kafkaSpark.java" /> <option value="$PROJECT_DIR$/src/test/latencyTest.java" /> @@ -181,15 +235,32 @@ <option value="$PROJECT_DIR$/src/main/resources/log4j.properties" /> <option value="$PROJECT_DIR$/src/main/resources/-log4j.xml" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/StreamingConsumer/KafkaSpark.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStreamingReceiver.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSparkReceiver.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/StreamWrapperActor.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/StreamKafkaActor.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStreaming.java" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafkaOptim.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafka.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafkaAsync.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/kafkacontinous.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafkaSync.java" /> + <option value="$PROJECT_DIR$/pom.xml" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSpark.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStreams.java" /> + <option value="$PROJECT_DIR$/kafka-bench.log" /> + <option value="$PROJECT_DIR$/src/main/resources/log4j.xml" /> + <option value="$PROJECT_DIR$/src/main/resources/config.properties" /> <option value="$PROJECT_DIR$/README.md" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/Config.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStream.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaFlink.java" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.java" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSpark.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaAsync.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaSync.java" /> + <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSparkStreaming.java" /> <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java" /> - <option value="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafka.java" /> - <option value="$PROJECT_DIR$/src/main/resources/log4j.xml" /> - <option value="$PROJECT_DIR$/src/main/resources/config.properties" /> </list> </option> </component> @@ -261,7 +332,9 @@ <foldersAlwaysOnTop value="true" /> </navigator> <panes> + <pane id="PackagesPane" /> <pane id="Scope" /> + <pane id="Scratches" /> <pane id="ProjectPane"> <subPane> <expand> @@ -302,7 +375,7 @@ <item name="main" type="462c0819:PsiDirectoryNode" /> <item name="java" type="462c0819:PsiDirectoryNode" /> <item name="kafkaLatency" type="462c0819:PsiDirectoryNode" /> - <item name="streaming" type="462c0819:PsiDirectoryNode" /> + <item name="producer" type="462c0819:PsiDirectoryNode" /> </path> <path> <item name="kafka-bench" type="b2602c69:ProjectViewProjectNode" /> @@ -311,27 +384,28 @@ <item name="main" type="462c0819:PsiDirectoryNode" /> <item name="java" type="462c0819:PsiDirectoryNode" /> <item name="kafkaLatency" type="462c0819:PsiDirectoryNode" /> - <item name="utils" type="462c0819:PsiDirectoryNode" /> + <item name="streaming" type="462c0819:PsiDirectoryNode" /> </path> <path> <item name="kafka-bench" type="b2602c69:ProjectViewProjectNode" /> <item name="Streaming-Kafka-Bench" type="462c0819:PsiDirectoryNode" /> <item name="src" type="462c0819:PsiDirectoryNode" /> <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="resources" type="462c0819:PsiDirectoryNode" /> + <item name="java" type="462c0819:PsiDirectoryNode" /> + <item name="kafkaLatency" type="462c0819:PsiDirectoryNode" /> + <item name="utils" type="462c0819:PsiDirectoryNode" /> </path> <path> <item name="kafka-bench" type="b2602c69:ProjectViewProjectNode" /> <item name="Streaming-Kafka-Bench" type="462c0819:PsiDirectoryNode" /> <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="test" type="462c0819:PsiDirectoryNode" /> + <item name="main" type="462c0819:PsiDirectoryNode" /> + <item name="resources" type="462c0819:PsiDirectoryNode" /> </path> </expand> <select /> </subPane> </pane> - <pane id="Scratches" /> - <pane id="PackagesPane" /> </panes> </component> <component name="PropertiesComponent"> @@ -346,31 +420,32 @@ <property name="options.splitter.details.proportions" value="0.2" /> <property name="options.searchVisible" value="true" /> <property name="last_opened_file_path" value="$PROJECT_DIR$" /> - <property name="settings.editor.selected.configurable" value="Debugger_Data_Views_Java" /> + <property name="settings.editor.selected.configurable" value="preferences.sourceCode.Other File Types" /> <property name="project.structure.last.edited" value="Project" /> <property name="project.structure.proportion" value="0.15" /> <property name="project.structure.side.proportion" value="0.2" /> + <property name="run.code.analysis.last.selected.profile" value="pProject Default" /> </component> <component name="RecentsManager"> - <key name="MoveFile.RECENT_KEYS"> - <recent name="$PROJECT_DIR$/src" /> - </key> <key name="MoveClassesOrPackagesDialog.RECENTS_KEY"> <recent name="fr.ippon.kafkaLatency.StreamingConsumer" /> </key> + <key name="CopyFile.RECENT_KEYS"> + <recent name="$PROJECT_DIR$/src/main" /> + <recent name="$PROJECT_DIR$/src" /> + <recent name="$PROJECT_DIR$/src/main/resources" /> + <recent name="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/properties" /> + <recent name="$PROJECT_DIR$/src/main/java" /> + </key> <key name="CopyClassDialog.RECENTS_KEY"> + <recent name="fr.ippon.kafkaLatency.streaming" /> <recent name="fr.ippon.kafkaLatency" /> <recent name="fr.ippon.kafkaLatency.StreamingConsumer" /> <recent name="fr.ippon.kafkaTimestamp" /> <recent name="kafka" /> - <recent name="fr.ippon.kafka" /> </key> - <key name="CopyFile.RECENT_KEYS"> - <recent name="$PROJECT_DIR$/src/main" /> + <key name="MoveFile.RECENT_KEYS"> <recent name="$PROJECT_DIR$/src" /> - <recent name="$PROJECT_DIR$/src/main/resources" /> - <recent name="$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/properties" /> - <recent name="$PROJECT_DIR$/src/main/java" /> </key> </component> <component name="RunDashboard"> @@ -385,7 +460,7 @@ </list> </option> </component> - <component name="RunManager" selected="JUnit.LatencyTest.sparkContinuousTest"> + <component name="RunManager" selected="Application.KafkaContinuousSpark"> <configuration default="true" type="Applet" factoryName="Applet"> <option name="HTML_USED" value="false" /> <option name="WIDTH" value="400" /> @@ -393,16 +468,36 @@ <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" /> <module /> </configuration> - <configuration name="AlimKafka" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> + <configuration name="AlimKafkaAsync" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea"> + <pattern> + <option name="PATTERN" value="fr.ippon.kafkaLatency.producer.*" /> + <option name="ENABLED" value="true" /> + </pattern> + </extension> + <extension name="recording" autostart="false" /> + <option name="MAIN_CLASS_NAME" value="fr.ippon.kafkaLatency.producer.AlimKafkaAsync" /> + <option name="VM_PARAMETERS" /> + <option name="PROGRAM_PARAMETERS" /> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="ENABLE_SWING_INSPECTOR" value="false" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <module name="kafka-bench" /> + <envs /> + </configuration> + <configuration name="AlimKafkaSync" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea"> <pattern> - <option name="PATTERN" value="fr.ippon.kafkaLatency.*" /> + <option name="PATTERN" value="fr.ippon.kafkaLatency.producer.*" /> <option name="ENABLED" value="true" /> </pattern> </extension> <extension name="recording" autostart="false" /> - <option name="MAIN_CLASS_NAME" value="fr.ippon.kafkaLatency.AlimKafka" /> - <option name="VM_PARAMETERS" value="-XX:+UseG1GC" /> + <option name="MAIN_CLASS_NAME" value="fr.ippon.kafkaLatency.producer.AlimKafkaSync" /> + <option name="VM_PARAMETERS" value="" /> <option name="PROGRAM_PARAMETERS" value="" /> <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> @@ -413,15 +508,15 @@ <module name="kafka-bench" /> <envs /> </configuration> - <configuration name="AlimKafkaOptim" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> + <configuration name="KafkaContinuousSpark" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea"> <pattern> - <option name="PATTERN" value="fr.ippon.kafkaLatency.*" /> + <option name="PATTERN" value="fr.ippon.kafkaLatency.streaming.*" /> <option name="ENABLED" value="true" /> </pattern> </extension> <extension name="recording" autostart="false" /> - <option name="MAIN_CLASS_NAME" value="fr.ippon.kafkaLatency.AlimKafkaOptim" /> + <option name="MAIN_CLASS_NAME" value="fr.ippon.kafkaLatency.streaming.KafkaContinuousSpark" /> <option name="VM_PARAMETERS" /> <option name="PROGRAM_PARAMETERS" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> @@ -433,7 +528,7 @@ <module name="kafka-bench" /> <envs /> </configuration> - <configuration name="KafkaSpark" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> + <configuration name="KafkaFlink" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea"> <pattern> <option name="PATTERN" value="fr.ippon.kafkaLatency.streaming.*" /> @@ -441,10 +536,10 @@ </pattern> </extension> <extension name="recording" autostart="false" /> - <option name="MAIN_CLASS_NAME" value="fr.ippon.kafkaLatency.streaming.KafkaSpark" /> - <option name="VM_PARAMETERS" value="-XX:+UnlockCommercialFeatures -XX:+FlightRecorder" /> - <option name="PROGRAM_PARAMETERS" value="" /> - <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> + <option name="MAIN_CLASS_NAME" value="fr.ippon.kafkaLatency.streaming.KafkaFlink" /> + <option name="VM_PARAMETERS" /> + <option name="PROGRAM_PARAMETERS" /> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> <option name="ALTERNATIVE_JRE_PATH" /> <option name="ENABLE_SWING_INSPECTOR" value="false" /> @@ -453,7 +548,7 @@ <module name="kafka-bench" /> <envs /> </configuration> - <configuration name="KafkaStructuredSpark" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> + <configuration name="KafkaStream" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea"> <pattern> <option name="PATTERN" value="fr.ippon.kafkaLatency.streaming.*" /> @@ -461,7 +556,7 @@ </pattern> </extension> <extension name="recording" autostart="false" /> - <option name="MAIN_CLASS_NAME" value="fr.ippon.kafkaLatency.streaming.KafkaStructuredSpark" /> + <option name="MAIN_CLASS_NAME" value="fr.ippon.kafkaLatency.streaming.KafkaStream" /> <option name="VM_PARAMETERS" /> <option name="PROGRAM_PARAMETERS" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> @@ -488,27 +583,6 @@ <module name="" /> <envs /> </configuration> - <configuration name="LatencyTest.sparkContinuousTest" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <extension name="recording" autostart="true" /> - <module name="kafka-bench" /> - <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> - <option name="ALTERNATIVE_JRE_PATH" /> - <option name="PACKAGE_NAME" value="" /> - <option name="MAIN_CLASS_NAME" value="LatencyTest" /> - <option name="METHOD_NAME" value="sparkContinuousTest" /> - <option name="TEST_OBJECT" value="method" /> - <option name="VM_PARAMETERS" value="-ea" /> - <option name="PARAMETERS" /> - <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" /> - <option name="ENV_VARIABLES" /> - <option name="PASS_PARENT_ENVS" value="true" /> - <option name="TEST_SEARCH_SCOPE"> - <value defaultName="singleModule" /> - </option> - <envs /> - <patterns /> - </configuration> <configuration default="true" type="JUnit" factoryName="JUnit"> <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> <extension name="recording" autostart="true" /> @@ -791,19 +865,18 @@ </configuration> <list size="6"> <item index="0" class="java.lang.String" itemvalue="JUnit.fr.ippon.kafkaLatency.streaming in kafka-bench" /> - <item index="1" class="java.lang.String" itemvalue="Application.KafkaSpark" /> - <item index="2" class="java.lang.String" itemvalue="Application.AlimKafka" /> - <item index="3" class="java.lang.String" itemvalue="Application.KafkaStructuredSpark" /> - <item index="4" class="java.lang.String" itemvalue="Application.AlimKafkaOptim" /> - <item index="5" class="java.lang.String" itemvalue="JUnit.LatencyTest.sparkContinuousTest" /> + <item index="1" class="java.lang.String" itemvalue="Application.KafkaStream" /> + <item index="2" class="java.lang.String" itemvalue="Application.AlimKafkaSync" /> + <item index="3" class="java.lang.String" itemvalue="Application.KafkaFlink" /> + <item index="4" class="java.lang.String" itemvalue="Application.AlimKafkaAsync" /> + <item index="5" class="java.lang.String" itemvalue="Application.KafkaContinuousSpark" /> </list> <recent_temporary> - <list size="5"> - <item index="0" class="java.lang.String" itemvalue="JUnit.LatencyTest.sparkContinuousTest" /> - <item index="1" class="java.lang.String" itemvalue="Application.AlimKafka" /> - <item index="2" class="java.lang.String" itemvalue="Application.KafkaSpark" /> - <item index="3" class="java.lang.String" itemvalue="Application.AlimKafkaOptim" /> - <item index="4" class="java.lang.String" itemvalue="Application.KafkaStructuredSpark" /> + <list size="4"> + <item index="0" class="java.lang.String" itemvalue="Application.AlimKafkaAsync" /> + <item index="1" class="java.lang.String" itemvalue="Application.KafkaContinuousSpark" /> + <item index="2" class="java.lang.String" itemvalue="Application.KafkaFlink" /> + <item index="3" class="java.lang.String" itemvalue="Application.AlimKafkaSync" /> </list> </recent_temporary> </component> @@ -826,6 +899,14 @@ <option name="presentableId" value="Default" /> <updated>1482932185202</updated> </task> + <task id="LOCAL-00001" summary="Update formating"> + <created>1522422883816</created> + <option name="number" value="00001" /> + <option name="presentableId" value="LOCAL-00001" /> + <option name="project" value="LOCAL" /> + <updated>1522422883816</updated> + </task> + <option name="localTasksCounter" value="2" /> <servers /> </component> <component name="TestHistory"> @@ -878,11 +959,13 @@ <window_info id="Palette	" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25856355" sideWeight="0.36324787" order="7" side_tool="true" content_ui="tabs" /> <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.47557998" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" /> - <window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25856355" sideWeight="0.6367521" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32975295" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" /> + <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25856355" sideWeight="0.6367521" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32928178" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" /> <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32975295" sideWeight="0.4859585" order="9" side_tool="false" content_ui="tabs" /> <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> - <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.21001221" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> + <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.21245421" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> + <window_info id="Inspection Results" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.3281768" sideWeight="0.49761903" order="11" side_tool="false" content_ui="tabs" /> + <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3281768" sideWeight="0.495116" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.24969475" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> @@ -897,11 +980,9 @@ <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32928178" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" /> <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> - <window_info id="Inspection Results" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32914045" sideWeight="0.49761903" order="11" side_tool="false" content_ui="tabs" /> <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> - <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3281768" sideWeight="0.495116" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" /> </layout> <layout-to-restore> @@ -974,6 +1055,9 @@ <ignored-roots> <path value="$PROJECT_DIR$" /> </ignored-roots> + <MESSAGE value="Update formating" /> + <MESSAGE value="final version" /> + <option name="LAST_COMMIT_MESSAGE" value="final version" /> </component> <component name="XDebuggerManager"> <breakpoint-manager> @@ -996,12 +1080,6 @@ <properties /> <option name="timeStamp" value="103" /> </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStreaming.java</url> - <line>43</line> - <properties /> - <option name="timeStamp" value="144" /> - </line-breakpoint> <line-breakpoint enabled="true" type="java-line"> <url>file://$PROJECT_DIR$/src/test/LatencyTest.java</url> <line>64</line> @@ -1009,22 +1087,16 @@ <option name="timeStamp" value="150" /> </line-breakpoint> <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafkaOptim.java</url> - <line>66</line> + <url>file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java</url> + <line>47</line> <properties /> - <option name="timeStamp" value="161" /> + <option name="timeStamp" value="179" /> </line-breakpoint> <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafkaOptim.java</url> - <line>62</line> + <url>file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaFlink.java</url> + <line>75</line> <properties /> - <option name="timeStamp" value="162" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafka.java</url> - <line>63</line> - <properties /> - <option name="timeStamp" value="163" /> + <option name="timeStamp" value="182" /> </line-breakpoint> <breakpoint enabled="true" type="java-exception"> <properties class="java.lang.NullPointerException" package="java.lang" /> @@ -1034,7 +1106,7 @@ <breakpoints-dialog> <breakpoints-dialog /> </breakpoints-dialog> - <option name="time" value="164" /> + <option name="time" value="186" /> </breakpoint-manager> <watches-manager /> </component> @@ -1064,48 +1136,6 @@ </expressions> </component> <component name="editorHistoryManager"> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTime/KafkaFlink.java" /> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTime/KafkaMetrics.java" /> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTime/kafkaSpark.java" /> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTime/KafkaStreamsTest.java" /> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaTime/kafkaStructuredSpark.java" /> - <entry file="file://$PROJECT_DIR$/chess.log.2018-03-15" /> - <entry file="jar://$MAVEN_REPOSITORY$/org/apache/flink/flink-core/1.4.2/flink-core-1.4.2.jar!/org/apache/flink/api/common/functions/MapFunction.class"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="120"> - <caret line="12" column="6" lean-forward="false" selection-start-line="12" selection-start-column="6" selection-end-line="12" selection-end-column="6" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/properties/PropertyFileResolver.java" /> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/properties/ApplicationProperty.java" /> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/properties/ApplicaitonPropertyProducer.java" /> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/JsonPOJOSerde.java" /> - <entry file="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-configuration2/2.2/commons-configuration2-2.2.jar!/org/apache/commons/configuration2/builder/fluent/Parameters.class"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="187"> - <caret line="91" column="0" lean-forward="false" selection-start-line="91" selection-start-column="0" selection-end-line="91" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.3/commons-beanutils-1.9.3.jar!/org/apache/commons/beanutils/PropertyUtilsBean.class"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="296"> - <caret line="26" column="30" lean-forward="false" selection-start-line="26" selection-start-column="13" selection-end-line="26" selection-end-column="30" /> - </state> - </provider> - </entry> - <entry file="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-configuration2/2.1/commons-configuration2-2.1.jar!/org/apache/commons/configuration2/builder/BasicConfigurationBuilder.class"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="214"> - <caret line="100" column="0" lean-forward="false" selection-start-line="100" selection-start-column="0" selection-end-line="100" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/KafkaMetrics.java" /> - <entry file="file://$PROJECT_DIR$/chess.log" /> - <entry file="file://$PROJECT_DIR$/test.json" /> - <entry file="file://$PROJECT_DIR$/src/main/resources/persons.json" /> <entry file="jar://$MAVEN_REPOSITORY$/org/apache/kafka/kafka-streams/0.11.0.2/kafka-streams-0.11.0.2.jar!/org/apache/kafka/streams/processor/TimestampExtractor.class"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="120"> @@ -1130,25 +1160,6 @@ </entry> <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafkaMain.java" /> <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/StreamingConsumer/KafkaContinuousSparkMain.java" /> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaFlink.java"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-225"> - <caret line="26" column="19" lean-forward="false" selection-start-line="26" selection-start-column="19" selection-end-line="26" selection-end-column="19" /> - <folding> - <element signature="imports" expanded="false" /> - <element signature="e#1873#1874#0" expanded="false" /> - <element signature="e#1920#1921#0" expanded="false" /> - </folding> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/listPersons.json"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - </state> - </provider> - </entry> <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/model/Person.java"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="180"> @@ -1171,16 +1182,6 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStreaming.java"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="1012"> - <caret line="76" column="87" lean-forward="true" selection-start-line="76" selection-start-column="87" selection-end-line="76" selection-end-column="87" /> - <folding> - <element signature="imports" expanded="true" /> - </folding> - </state> - </provider> - </entry> <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/StreamingConsumer/KafkaSparkTuning.java" /> <entry file="file://$PROJECT_DIR$/src/log4j.xml" /> <entry file="file://$PROJECT_DIR$/src/main/log4j.xml" /> @@ -1200,30 +1201,139 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/Config.java"> + <entry file="file://$PROJECT_DIR$/src/test/LatencyTest.java" /> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStreamingReceiver.java" /> + <entry file="jar://$MAVEN_REPOSITORY$/org/apache/spark/spark-core_2.11/2.3.0/spark-core_2.11-2.3.0.jar!/org/apache/spark/api/java/function/VoidFunction.class"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="240"> - <caret line="22" column="0" lean-forward="false" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" /> - <folding> - <element signature="imports" expanded="false" /> - </folding> + <state relative-caret-position="120"> + <caret line="11" column="9" lean-forward="false" selection-start-line="11" selection-start-column="9" selection-end-line="11" selection-end-column="9" /> + </state> + </provider> + </entry> + <entry file="jar://$MAVEN_REPOSITORY$/dibbhatt/kafka-spark-consumer/1.0.14/kafka-spark-consumer-1.0.14.jar!/consumer/kafka/ReceiverLauncher.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="287"> + <caret line="43" column="52" lean-forward="false" selection-start-line="43" selection-start-column="34" selection-end-line="43" selection-end-column="52" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSparkReceiver.java" /> + <entry file="jar://$MAVEN_REPOSITORY$/org/apache/spark/spark-streaming-kafka-0-10_2.11/2.3.0/spark-streaming-kafka-0-10_2.11-2.3.0.jar!/org/apache/spark/streaming/kafka010/DirectKafkaInputDStream.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="15"> + <caret line="1" column="21" lean-forward="false" selection-start-line="1" selection-start-column="21" selection-end-line="1" selection-end-column="21" /> + </state> + </provider> + </entry> + <entry file="jar://$MAVEN_REPOSITORY$/org/apache/spark/spark-streaming-kafka-0-10_2.11/2.3.0/spark-streaming-kafka-0-10_2.11-2.3.0.jar!/org/apache/spark/streaming/kafka010/CachedKafkaConsumer.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="15"> + <caret line="1" column="24" lean-forward="false" selection-start-line="1" selection-start-column="24" selection-end-line="1" selection-end-column="24" /> + </state> + </provider> + </entry> + <entry file="jar://$MAVEN_REPOSITORY$/org/apache/spark/spark-streaming_2.11/2.3.0/spark-streaming_2.11-2.3.0.jar!/org/apache/spark/streaming/package.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="15"> + <caret line="1" column="15" lean-forward="false" selection-start-line="1" selection-start-column="15" selection-end-line="1" selection-end-column="15" /> + </state> + </provider> + </entry> + <entry file="jar://$MAVEN_REPOSITORY$/org/apache/spark/spark-streaming-kafka-0-10_2.11/2.3.0/spark-streaming-kafka-0-10_2.11-2.3.0.jar!/org/apache/spark/streaming/kafka010/KafkaRDD.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="15"> + <caret line="1" column="21" lean-forward="false" selection-start-line="1" selection-start-column="21" selection-end-line="1" selection-end-column="21" /> + </state> + </provider> + </entry> + <entry file="jar://$MAVEN_REPOSITORY$/org/apache/spark/spark-streaming-kafka-0-10_2.11/2.3.0/spark-streaming-kafka-0-10_2.11-2.3.0.jar!/org/apache/spark/streaming/kafka010/KafkaRDDPartition.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="15"> + <caret line="1" column="24" lean-forward="false" selection-start-line="1" selection-start-column="24" selection-end-line="1" selection-end-column="24" /> + </state> + </provider> + </entry> + <entry file="jar://$MAVEN_REPOSITORY$/org/apache/spark/spark-streaming-kafka-0-10_2.11/2.3.0/spark-streaming-kafka-0-10_2.11-2.3.0.jar!/org/apache/spark/streaming/kafka010/package.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="15"> + <caret line="1" column="15" lean-forward="false" selection-start-line="1" selection-start-column="15" selection-end-line="1" selection-end-column="15" /> + </state> + </provider> + </entry> + <entry file="jar://$MAVEN_REPOSITORY$/org/apache/spark/spark-streaming-kafka-0-10_2.11/2.3.0/spark-streaming-kafka-0-10_2.11-2.3.0.jar!/org/apache/spark/streaming/kafka010/KafkaUtils.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="30"> + <caret line="2" column="7" lean-forward="false" selection-start-line="2" selection-start-column="7" selection-end-line="2" selection-end-column="7" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafkaOptim.java"> + <entry file="jar://$MAVEN_REPOSITORY$/dibbhatt/kafka-spark-consumer/1.0.14/kafka-spark-consumer-1.0.14.jar!/consumer/kafka/MessageAndMetadata.class"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="735"> - <caret line="49" column="51" lean-forward="false" selection-start-line="49" selection-start-column="51" selection-end-line="49" selection-end-column="51" /> + <state relative-caret-position="90"> + <caret line="9" column="13" lean-forward="false" selection-start-line="9" selection-start-column="13" selection-end-line="9" selection-end-column="13" /> + </state> + </provider> + </entry> + <entry file="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.6.7.1/jackson-databind-2.6.7.1.jar!/com/fasterxml/jackson/databind/node/ObjectNode.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="196"> + <caret line="185" column="0" lean-forward="false" selection-start-line="185" selection-start-column="0" selection-end-line="185" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="jar://$MAVEN_REPOSITORY$/com/typesafe/akka/akka-actor_2.11/2.5.9/akka-actor_2.11-2.5.9.jar!/akka/japi/function/Procedure.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="60"> + <caret line="4" column="6" lean-forward="false" selection-start-line="4" selection-start-column="6" selection-end-line="4" selection-end-column="6" /> + </state> + </provider> + </entry> + <entry file="jar://$MAVEN_REPOSITORY$/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jar!/scala/collection/convert/Wrappers.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="214"> + <caret line="41" column="0" lean-forward="false" selection-start-line="41" selection-start-column="0" selection-end-line="41" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/StreamKafkaActor.java" /> + <entry file="file://$PROJECT_DIR$/src/main/resources/listPersons.json"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="15"> + <caret line="1" column="5" lean-forward="false" selection-start-line="1" selection-start-column="1" selection-end-line="1" selection-end-column="5" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/kafkacontinous.java" /> + <entry file="jar://$MAVEN_REPOSITORY$/org/apache/spark/spark-core_2.11/2.3.0/spark-core_2.11-2.3.0.jar!/org/apache/spark/api/java/function/MapFunction.class"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="120"> + <caret line="11" column="6" lean-forward="false" selection-start-line="11" selection-start-column="6" selection-end-line="11" selection-end-column="6" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/kafka-bench.log"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="-90217"> + <caret line="1670" column="149" lean-forward="false" selection-start-line="1670" selection-start-column="142" selection-end-line="1670" selection-end-column="149" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/MetricsProducerReporter.java"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="630"> + <caret line="44" column="26" lean-forward="false" selection-start-line="44" selection-start-column="18" selection-end-line="44" selection-end-column="26" /> <folding> - <element signature="imports" expanded="false" /> + <element signature="imports" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/MetricsProducerReporter.java"> + <entry file="file://$PROJECT_DIR$/src/main/resources/log4j.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="105"> - <caret line="17" column="36" lean-forward="false" selection-start-line="17" selection-start-column="13" selection-end-line="17" selection-end-column="36" /> + <state relative-caret-position="255"> + <caret line="17" column="45" lean-forward="false" selection-start-line="17" selection-start-column="45" selection-end-line="17" selection-end-column="45" /> <folding /> </state> </provider> @@ -1231,8 +1341,8 @@ <entry file="file://$PROJECT_DIR$/README.md"> <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> <state split_layout="SPLIT"> - <first_editor relative-caret-position="690"> - <caret line="46" column="6" lean-forward="false" selection-start-line="46" selection-start-column="6" selection-end-line="46" selection-end-column="6" /> + <first_editor relative-caret-position="720"> + <caret line="48" column="22" lean-forward="true" selection-start-line="48" selection-start-column="22" selection-end-line="48" selection-end-column="22" /> <folding /> </first_editor> <second_editor /> @@ -1245,91 +1355,112 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.java"> + <entry file="file://$PROJECT_DIR$/src/main/resources/config.properties"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="288"> - <caret line="33" column="34" lean-forward="false" selection-start-line="33" selection-start-column="34" selection-end-line="33" selection-end-column="34" /> - <folding> - <element signature="imports" expanded="true" /> - </folding> + <state relative-caret-position="15"> + <caret line="1" column="32" lean-forward="false" selection-start-line="1" selection-start-column="32" selection-end-line="1" selection-end-column="32" /> + <folding /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.java"> + <entry file="file://$PROJECT_DIR$/pom.xml"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="975"> + <caret line="65" column="21" lean-forward="false" selection-start-line="65" selection-start-column="21" selection-end-line="65" selection-end-column="21" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/Config.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="1340"> - <caret line="93" column="5" lean-forward="false" selection-start-line="93" selection-start-column="5" selection-end-line="93" selection-end-column="5" /> + <state relative-caret-position="394"> + <caret line="34" column="53" lean-forward="false" selection-start-line="34" selection-start-column="53" selection-end-line="34" selection-end-column="53" /> <folding> <element signature="imports" expanded="true" /> + <element signature="e#1288#1289#0" expanded="true" /> + <element signature="e#1343#1344#0" expanded="true" /> + <element signature="e#1457#1458#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSpark.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStream.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-225"> - <caret line="39" column="73" lean-forward="false" selection-start-line="39" selection-start-column="73" selection-end-line="39" selection-end-column="73" /> + <state relative-caret-position="186"> + <caret line="76" column="75" lean-forward="false" selection-start-line="76" selection-start-column="75" selection-end-line="76" selection-end-column="75" /> <folding> <element signature="imports" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaFlink.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="207"> - <caret line="33" column="45" lean-forward="false" selection-start-line="33" selection-start-column="45" selection-end-line="33" selection-end-column="45" /> - <folding /> + <state relative-caret-position="193"> + <caret line="30" column="12" lean-forward="false" selection-start-line="30" selection-start-column="12" selection-end-line="30" selection-end-column="12" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/AlimKafka.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="413"> - <caret line="78" column="0" lean-forward="false" selection-start-line="78" selection-start-column="0" selection-end-line="78" selection-end-column="0" /> + <state relative-caret-position="364"> + <caret line="89" column="24" lean-forward="false" selection-start-line="89" selection-start-column="24" selection-end-line="89" selection-end-column="24" /> <folding> <element signature="imports" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/log4j.xml"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="60"> - <caret line="4" column="0" lean-forward="false" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" /> - <folding /> + <state relative-caret-position="296"> + <caret line="88" column="22" lean-forward="false" selection-start-line="88" selection-start-column="22" selection-end-line="88" selection-end-column="22" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/kafka-bench.log"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaAsync.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-26569"> - <caret line="1938" column="42" lean-forward="false" selection-start-line="1938" selection-start-column="32" selection-end-line="1938" selection-end-column="42" /> - <folding /> + <state relative-caret-position="394"> + <caret line="123" column="21" lean-forward="false" selection-start-line="123" selection-start-column="21" selection-end-line="123" selection-end-column="21" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/test/LatencyTest.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaSync.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="246"> - <caret line="25" column="0" lean-forward="true" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" /> - <folding /> + <state relative-caret-position="690"> + <caret line="124" column="21" lean-forward="false" selection-start-line="124" selection-start-column="21" selection-end-line="124" selection-end-column="21" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/pom.xml"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSparkStreaming.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="390"> - <caret line="26" column="0" lean-forward="true" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" /> - <folding /> + <state relative-caret-position="300"> + <caret line="72" column="5" lean-forward="false" selection-start-line="72" selection-start-column="5" selection-end-line="72" selection-end-column="5" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/config.properties"> + <entry file="file://$PROJECT_DIR$/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="90"> - <caret line="6" column="14" lean-forward="false" selection-start-line="6" selection-start-column="14" selection-end-line="6" selection-end-column="14" /> - <folding /> + <state relative-caret-position="435"> + <caret line="29" column="35" lean-forward="false" selection-start-line="29" selection-start-column="35" selection-end-line="29" selection-end-column="35" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> </state> </provider> </entry> diff --git a/README.md b/README.md index c1e4943..d36835f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Experiment with Apache Kafka and streaming framework -Mesure latency between record insertion in Kafka and Streaming processing using Kafka automated timestamp of messages. +Measure latency between record insertion in Kafka and Streaming processing using automated timestamping of Kafka messages. ## Frameworks tested - Kafka Stream @@ -14,23 +14,25 @@ Mesure latency between record insertion in Kafka and Streaming processing using ## Sources ### Producer -- fr.ippon.kafkaLatency.AlimKafka : Kafka Producer (100 000 messages) +- fr.ippon.kafkaLatency.producer.AlimKafkaSync : Kafka Producer (100 000 messages) : sync API +- fr.ippon.kafkaLatency.producer.AlimKafkaAsync : Kafka Producer (100 000 messages) : Async API ### Consummer -- fr.ippon.kafkaLatency.streaming.KafkaSpark : Spark streaming consummer +- fr.ippon.kafkaLatency.streaming.KafkaSparkStreaming : Spark streaming consummer - fr.ippon.kafkaLatency.streaming.KafkaStructuredSpark : Spark Structured streaming consummer - fr.ippon.kafkaLatency.streaming.KafkaContinuousSpark : Spark Continous processing consummer -- fr.ippon.kafkaLatency.streaming.KafkaStreaming : Kafka Streams consummer +- fr.ippon.kafkaLatency.streaming.KafkaStream : Kafka Streams consummer - fr.ippon.kafkaLatency.streaming.KafkaFlink : Flink consummer ### Utils - fr.ippon.kafkaLatency.utils.UtilStats : Streaming statistics - fr.ippon.kafkaLatency.utils.MetricsProducerReporter : Kafka Producer Metrics +- fr.ippon.kafkaLatency.utils.Config : Helper to fetch properties ## Resources ### config.properties : - Kafka - - topic : Kafka topic name to use + - topic : Kafka topic to use - numPartitions : Number of partitions for topic - replication : Replication Factor for topic - bootstrap.servers: List of Kafka servers @@ -38,10 +40,10 @@ Mesure latency between record insertion in Kafka and Streaming processing using - Streaming - stats.step : Number of message to group before calculate stats - stats.total : Total number of messages - - max.poll.records : Max records to fetch in Kafka + - max.poll.records : Max records to fetch in Kafka in a micro-batch - spark.continuous.interval : Trigger interval in spark continous processing - spark.structured.interval : Trigger interval in spark structured streaming - spark.streaming.interval : Interval of micro batch - data source - - listPersonns.json \ No newline at end of file + - listPersons.json \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1fceb87..267cf57 100644 --- a/pom.xml +++ b/pom.xml @@ -15,16 +15,6 @@ <junit.version>4.12</junit.version> </properties> - <repositories> - <repository> - <id>apache.snapshots</id> - <name>Apache Development Snapshot Repository</name> - <url>https://repository.apache.org/content/repositories/snapshots/</url> - <releases><enabled>false</enabled></releases> - <snapshots><enabled>true</enabled></snapshots> - </repository> - </repositories> - <build> <pluginManagement> diff --git a/src/main/java/fr/ippon/kafkaLatency/model/Person.java b/src/main/java/fr/ippon/kafkaLatency/model/Person.java index 6010811..9fb9b85 100644 --- a/src/main/java/fr/ippon/kafkaLatency/model/Person.java +++ b/src/main/java/fr/ippon/kafkaLatency/model/Person.java @@ -10,33 +10,35 @@ import java.util.List; */ public class Person { - Integer id; + private Integer id; - Boolean isActive; + private Boolean isActive; - Integer age; + private Integer age; - String name; + private String name; - String gender; + private String gender; - String company; + private String company; - String email; + private String email; - String phone; + private String phone; - String address; + private String address; - String placeOfBirth; + private String placeOfBirth; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "YYYY-MM-dd", timezone = "CET") + private Date dateOfBirth; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "YYYY-MM-dd'T'hh:mm:ss", timezone = "CET") + private Date registered; - List<Friend> friends; + private List<Friend> friends; public Person() { } @@ -161,7 +163,7 @@ public class Person { this.friends = friends; } - public static class Friend { + static class Friend { Integer id; public Friend() { diff --git a/src/main/java/fr/ippon/kafkaLatency/AlimKafkaOptim.java b/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaAsync.java similarity index 76% rename from src/main/java/fr/ippon/kafkaLatency/AlimKafkaOptim.java rename to src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaAsync.java index 27909b5..53c96bd 100644 --- a/src/main/java/fr/ippon/kafkaLatency/AlimKafkaOptim.java +++ b/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaAsync.java @@ -1,123 +1,128 @@ -package fr.ippon.kafkaLatency; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import fr.ippon.kafkaLatency.utils.Config; -import fr.ippon.kafkaLatency.utils.MetricsProducerReporter; -import org.apache.kafka.clients.admin.AdminClient; -import org.apache.kafka.clients.admin.CreateTopicsResult; -import org.apache.kafka.clients.admin.DeleteTopicsResult; -import org.apache.kafka.clients.admin.NewTopic; -import org.apache.kafka.clients.producer.KafkaProducer; -import org.apache.kafka.clients.producer.Producer; -import org.apache.kafka.clients.producer.ProducerConfig; -import org.apache.kafka.clients.producer.ProducerRecord; -import org.apache.kafka.common.errors.TopicExistsException; -import org.apache.kafka.common.internals.Topic; -import org.apache.kafka.common.serialization.StringSerializer; -import org.apache.kafka.connect.json.JsonSerializer; -import org.apache.log4j.Logger; - -import java.beans.IntrospectionException; -import java.io.File; -import java.io.IOException; -import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; -import java.util.Collections; -import java.util.Iterator; -import java.util.Properties; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeoutException; - -/** - * IPPON 2018. - */ -public class AlimKafkaOptim { - - private static ClassLoader classLoader = AlimKafkaOptim.class.getClassLoader(); - - private final static Logger logger = Logger.getLogger(AlimKafkaOptim.class); - - public static void main(String[] args) throws InterruptedException, IntrospectionException { - - StringBuilder stats = new StringBuilder(); - - Properties props = new Properties(); - - Producer<String, JsonNode> producer = null; - - String brokers = Config.getProperty("bootstrap.servers"); - String topic = Config.getProperty("topic"); - String numPartitions = Config.getProperty("numPartitions"); - String replication = Config.getProperty("replication"); - int total = Integer.valueOf(Config.getProperty("stats.total")); - - props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers); - - //Create topic if not exist - AdminClient adminClient = AdminClient.create(props); - - NewTopic newTopic = new NewTopic(topic, Integer.valueOf(numPartitions), Integer.valueOf(replication).shortValue()); - CreateTopicsResult createTopicsResult = adminClient.createTopics(Collections.singleton(newTopic)); - - try { - createTopicsResult.all().get(); - // real failure cause is wrapped inside the raised ExecutionException - } catch (ExecutionException e) { - if (e.getCause() instanceof TopicExistsException) { - logger.info("Topic already exists (delete manually to change settings) !!"); - } else if (e.getCause() instanceof TimeoutException) { - logger.error("Timeout !!"); - } else { - logger.error("Error !!" + e.getCause()); - } - } finally { - adminClient.close(); - } - - try { - - props.put(ProducerConfig.CLIENT_ID_CONFIG, "KafkaProducer"); - props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, - StringSerializer.class.getName()); - props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, - JsonSerializer.class.getName()); - - ObjectMapper mapper = new ObjectMapper(); - - producer = new KafkaProducer<String, JsonNode>(props); - File file = new File(classLoader.getResource("listPersons.json").getFile()); - - long i = 0; - - JsonNode allNodes = mapper.readTree(file); - - while (i < total) { - Iterator<JsonNode> it = allNodes.iterator(); - LocalDateTime start = LocalDateTime.now(); - - Producer<String, JsonNode> finalProducer = producer; - - while (it.hasNext()) { - finalProducer.send(new ProducerRecord<String, JsonNode>(topic, it.next())); - i++; - } - - LocalDateTime end = LocalDateTime.now(); - - long millis = ChronoUnit.MILLIS.between(start, end); - - stats.append(allNodes.size()).append(" messages inserted in ").append(millis).append(" ms.").append(System.lineSeparator()); - } - } catch (IOException e) { - logger.error("Error IO" + e.getMessage()); - } finally { - Thread.sleep(3000); - logger.info(stats); - MetricsProducerReporter metrics = new MetricsProducerReporter(producer); - metrics.displayMetrics(); - producer.close(); - } - } - -} +package fr.ippon.kafkaLatency.producer; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import fr.ippon.kafkaLatency.utils.Config; +import fr.ippon.kafkaLatency.utils.MetricsProducerReporter; +import org.apache.kafka.clients.admin.AdminClient; +import org.apache.kafka.clients.admin.CreateTopicsResult; +import org.apache.kafka.clients.admin.NewTopic; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.Producer; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.errors.TopicExistsException; +import org.apache.kafka.common.serialization.StringSerializer; +import org.apache.kafka.connect.json.JsonSerializer; +import org.apache.log4j.Logger; + +import java.io.File; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Properties; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; + +/** + * IPPON 2018. + */ +public class AlimKafkaAsync { + + private static final ClassLoader classLoader = AlimKafkaAsync.class.getClassLoader(); + + private final static Logger logger = Logger.getLogger(AlimKafkaAsync.class); + + public static void main(String[] args) throws InterruptedException { + + StringBuilder stats = new StringBuilder(); + + Properties props = new Properties(); + + Producer<String, JsonNode> producer = null; + + String brokers = Config.getProperty("bootstrap.servers"); + String topic = Config.getProperty("topic"); + String numPartitions = Config.getProperty("numPartitions"); + String replication = Config.getProperty("replication"); + int total = Integer.valueOf(Config.getProperty("stats.total")); + + props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers); + + //Create topic if not exist + AdminClient adminClient = AdminClient.create(props); + + NewTopic newTopic = new NewTopic(topic, Integer.valueOf(numPartitions), Integer.valueOf(replication).shortValue()); + CreateTopicsResult createTopicsResult = adminClient.createTopics(Collections.singleton(newTopic)); + + try { + createTopicsResult.all().get(); + } catch (ExecutionException e) { + if (e.getCause() instanceof TopicExistsException) { + logger.info("Topic already exists (delete manually to change settings) !!"); + } else if (e.getCause() instanceof TimeoutException) { + logger.error("Timeout !!"); + } else { + logger.error("Error !!" + e.getCause()); + } + } finally { + adminClient.close(); + } + + try { + + props.put(ProducerConfig.CLIENT_ID_CONFIG, "KafkaProducerAsync"); + props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, + StringSerializer.class.getName()); + props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, + JsonSerializer.class.getName()); + + ObjectMapper mapper = new ObjectMapper(); + + producer = new KafkaProducer<String, JsonNode>(props); + File file = new File(Objects.requireNonNull(classLoader.getResource("listPersons.json")).getFile()); + + long i = 0; + + List<JsonNode> allNodes = mapper.readValue(file, new TypeReference<List<JsonNode>>() { + }); + + Producer<String, JsonNode> finalProducer = producer; + + while (i < total) { + LocalDateTime start = LocalDateTime.now(); + + long size = allNodes.stream().map(node -> { + try { + // synchronous API + finalProducer.send(new ProducerRecord<String, JsonNode>(topic, node)); + } catch (Exception e) { + logger.error("Error IO" + e.getMessage()); + } + return null; + }).count(); + + i = i + size; + + LocalDateTime end = LocalDateTime.now(); + + long millis = ChronoUnit.MILLIS.between(start, end); + + stats.append(allNodes.size()).append(" messages inserted in ").append(millis).append(" ms.").append(System.lineSeparator()); + } + } catch (IOException e) { + logger.error("Error IO" + e.getMessage()); + } finally { + logger.info(stats); + MetricsProducerReporter metrics = new MetricsProducerReporter(producer); + metrics.displayMetrics(); + assert producer != null; + producer.close(); + } + } + +} diff --git a/src/main/java/fr/ippon/kafkaLatency/AlimKafka.java b/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaSync.java similarity index 78% rename from src/main/java/fr/ippon/kafkaLatency/AlimKafka.java rename to src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaSync.java index 4b0caba..f567865 100644 --- a/src/main/java/fr/ippon/kafkaLatency/AlimKafka.java +++ b/src/main/java/fr/ippon/kafkaLatency/producer/AlimKafkaSync.java @@ -1,129 +1,129 @@ -package fr.ippon.kafkaLatency; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import fr.ippon.kafkaLatency.model.Person; -import fr.ippon.kafkaLatency.utils.Config; -import fr.ippon.kafkaLatency.utils.MetricsProducerReporter; -import org.apache.kafka.clients.admin.AdminClient; -import org.apache.kafka.clients.admin.CreateTopicsResult; -import org.apache.kafka.clients.admin.NewTopic; -import org.apache.kafka.clients.producer.KafkaProducer; -import org.apache.kafka.clients.producer.Producer; -import org.apache.kafka.clients.producer.ProducerConfig; -import org.apache.kafka.clients.producer.ProducerRecord; -import org.apache.kafka.common.errors.TopicExistsException; -import org.apache.kafka.common.serialization.StringSerializer; -import org.apache.kafka.connect.json.JsonSerializer; -import org.apache.log4j.Logger; - -import java.beans.IntrospectionException; -import java.io.File; -import java.io.IOException; -import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; -import java.util.Collections; -import java.util.List; -import java.util.Properties; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeoutException; - -/** - * IPPON 2018. - */ -public class AlimKafka { - - private static ClassLoader classLoader = AlimKafka.class.getClassLoader(); - - private final static Logger logger = Logger.getLogger(AlimKafka.class); - - public static void main(String[] args) throws InterruptedException, IntrospectionException { - - StringBuilder stats = new StringBuilder(); - - Properties props = new Properties(); - - Producer<String, JsonNode> producer = null; - - String brokers = Config.getProperty("bootstrap.servers"); - String topic = Config.getProperty("topic"); - String numPartitions = Config.getProperty("numPartitions"); - String replication = Config.getProperty("replication"); - int total = Integer.valueOf(Config.getProperty("stats.total")); - - props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers); - - //Create topic if not exist - AdminClient adminClient = AdminClient.create(props); - - NewTopic newTopic = new NewTopic(topic, Integer.valueOf(numPartitions), Integer.valueOf(replication).shortValue()); - CreateTopicsResult createTopicsResult = adminClient.createTopics(Collections.singleton(newTopic)); - - try { - createTopicsResult.all().get(); - // real failure cause is wrapped inside the raised ExecutionException - } catch (ExecutionException e) { - if (e.getCause() instanceof TopicExistsException) { - logger.info("Topic already exists (delete manually to change settings) !!"); - } else if (e.getCause() instanceof TimeoutException) { - logger.error("Timeout !!"); - } else { - logger.error("Error !!" + e.getCause()); - } - } finally { - adminClient.close(); - } - - try { - props.put(ProducerConfig.CLIENT_ID_CONFIG, "KafkaProducer"); - props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, - StringSerializer.class.getName()); - props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, - JsonSerializer.class.getName()); - props.put(ProducerConfig.MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION, 4); - ObjectMapper mapper = new ObjectMapper(); - - producer = new KafkaProducer<String, JsonNode>(props); - List<Person> persons = null; - - File file = new File(classLoader.getResource("listPersons.json").getFile()); - - long i = 0; - - persons = mapper.readValue(file, new TypeReference<List<Person>>() { - }); - - while (i < total) { - - LocalDateTime start = LocalDateTime.now(); - - Producer<String, JsonNode> finalProducer = producer; - long size = persons.parallelStream().map(person -> { - try { - finalProducer.send(new ProducerRecord<String, JsonNode>(topic, mapper.valueToTree(person))); - } catch (Exception e) { - logger.error("Error IO" + e.getMessage()); - } - return null; - }).count(); - - i = i + size; - LocalDateTime end = LocalDateTime.now(); - - long millis = ChronoUnit.MILLIS.between(start, end); - - stats.append(persons.size()).append(" messages inserted in ").append(millis).append(" ms.").append(System.lineSeparator()); - } - } catch (IOException e) { - logger.error("Error IO" + e.getMessage()); - } finally { - Thread.sleep(5000); - logger.info(stats); - MetricsProducerReporter metrics = new MetricsProducerReporter(producer); - metrics.displayMetrics(); - producer.close(); - } - } - -} +package fr.ippon.kafkaLatency.producer; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import fr.ippon.kafkaLatency.model.Person; +import fr.ippon.kafkaLatency.utils.Config; +import fr.ippon.kafkaLatency.utils.MetricsProducerReporter; +import org.apache.kafka.clients.admin.AdminClient; +import org.apache.kafka.clients.admin.CreateTopicsResult; +import org.apache.kafka.clients.admin.NewTopic; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.Producer; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.errors.TopicExistsException; +import org.apache.kafka.common.serialization.StringSerializer; +import org.apache.kafka.connect.json.JsonSerializer; +import org.apache.log4j.Logger; + +import java.io.File; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Properties; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; + +/** + * IPPON 2018. + */ +public class AlimKafkaSync { + + private static final ClassLoader classLoader = AlimKafkaSync.class.getClassLoader(); + + private final static Logger logger = Logger.getLogger(AlimKafkaSync.class); + + public static void main(String[] args) throws InterruptedException { + + StringBuilder stats = new StringBuilder(); + + Properties props = new Properties(); + + Producer<String, JsonNode> producer = null; + + String brokers = Config.getProperty("bootstrap.servers"); + String topic = Config.getProperty("topic"); + String numPartitions = Config.getProperty("numPartitions"); + String replication = Config.getProperty("replication"); + int total = Integer.valueOf(Config.getProperty("stats.total")); + + props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers); + + //Create topic if not exist + AdminClient adminClient = AdminClient.create(props); + + NewTopic newTopic = new NewTopic(topic, Integer.valueOf(numPartitions), Integer.valueOf(replication).shortValue()); + CreateTopicsResult createTopicsResult = adminClient.createTopics(Collections.singleton(newTopic)); + + try { + createTopicsResult.all().get(); + } catch (ExecutionException e) { + if (e.getCause() instanceof TopicExistsException) { + logger.info("Topic already exists (delete manually to change settings) !!"); + } else if (e.getCause() instanceof TimeoutException) { + logger.error("Timeout !!"); + } else { + logger.error("Error !!" + e.getCause()); + } + } finally { + adminClient.close(); + } + + try { + props.put(ProducerConfig.CLIENT_ID_CONFIG, "KafkaProducerSync"); + props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, + StringSerializer.class.getName()); + props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, + JsonSerializer.class.getName()); + ObjectMapper mapper = new ObjectMapper(); + + producer = new KafkaProducer<String, JsonNode>(props); + List<Person> persons = null; + + File file = new File(Objects.requireNonNull(classLoader.getResource("listPersons.json")).getFile()); + + long i = 0; + + List<JsonNode> allNodes = mapper.readValue(file, new TypeReference<List<JsonNode>>() { + }); + + Producer<String, JsonNode> localProducer = producer; + + while (i < total) { + + LocalDateTime start = LocalDateTime.now(); + + long size = allNodes.stream().map(node -> { + try { + // synchronous API + localProducer.send(new ProducerRecord<String, JsonNode>(topic, node)).get(); + } catch (Exception e) { + logger.error("Error IO" + e.getMessage()); + } + return null; + }).count(); + + i = i + size; + LocalDateTime end = LocalDateTime.now(); + + long millis = ChronoUnit.MILLIS.between(start, end); + + stats.append(allNodes.size()).append(" messages inserted in ").append(millis).append(" ms.").append(System.lineSeparator()); + } + } catch (IOException e) { + logger.error("Error IO" + e.getMessage()); + } finally { + logger.info(stats); + MetricsProducerReporter metrics = new MetricsProducerReporter(producer); + metrics.displayMetrics(); + assert producer != null; + producer.close(); + } + } + +} diff --git a/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.java b/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.java index 2f1461f..959ad76 100644 --- a/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.java +++ b/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.java @@ -5,8 +5,6 @@ import fr.ippon.kafkaLatency.model.Person; import fr.ippon.kafkaLatency.utils.Config; import fr.ippon.kafkaLatency.utils.UtilStats; import org.apache.log4j.Logger; -import org.apache.spark.SparkConf; -import org.apache.spark.SparkContext; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; @@ -16,6 +14,7 @@ import org.apache.spark.sql.streaming.StreamingQuery; import org.apache.spark.sql.streaming.Trigger; import scala.Tuple2; +import java.io.Serializable; import java.sql.Timestamp; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; @@ -24,12 +23,13 @@ import java.util.concurrent.TimeUnit; /** * Ippon Tech 2018. */ -public class KafkaContinuousSpark { +public class KafkaContinuousSpark implements Serializable { - private final static ObjectMapper mapper = new ObjectMapper(); + private static final ObjectMapper mapper = new ObjectMapper(); private final static Logger logger = Logger.getLogger(KafkaContinuousSpark.class); public static void main(String[] args) { + StreamingQuery query = null; SparkSession spark = null; @@ -38,20 +38,18 @@ public class KafkaContinuousSpark { String topic = Config.getProperty("topic"); Integer SparkContinuousInterval = Config.getIntProperty("spark.continuous.interval"); Integer maxPollRecords = Config.getIntProperty("max.poll.records"); + Integer numPartitions = Config.getIntProperty("numPartitions"); - UtilStats stats = new UtilStats(); - SparkConf sparkConf = new SparkConf() - .setMaster("local[*]") - .set("spark.streaming.stopGracefullyOnShutdown", "true") - .set("spark.ui.showConsoleProgress", "false") - .set("spark.eventLog.enabled", "false") - .set("spark.streaming.backpressure.enabled", "true") - .setAppName("kafkaContinuous"); + UtilStats stats = new UtilStats("KafkaContinuousSpark"); - spark = new SparkSession(new SparkContext(sparkConf)); + // !!! number of kafka partitions must not exceed number of cores + spark = SparkSession.builder() + .appName("KafkaContinuousSpark") + .master("local[*]") + .getOrCreate(); - Dataset<Tuple2<String, Timestamp>> line = spark.readStream().format("kafka") + Dataset<Tuple2<String, Timestamp>> source = spark.readStream().format("kafka") .option("kafka.bootstrap.servers", brokers) .option("subscribe", topic) .option("max.poll.records", maxPollRecords) @@ -60,42 +58,40 @@ public class KafkaContinuousSpark { .select("value", "timestamp") .as(Encoders.tuple(Encoders.STRING(), Encoders.TIMESTAMP())); - Dataset<Long> json = line.map((MapFunction<Tuple2<String, Timestamp>, Long>) t -> { + Dataset<Person> ds = source.map((MapFunction<Tuple2<String, Timestamp>, Person>) t -> { LocalDateTime now = LocalDateTime.now(); LocalDateTime parsedDate = t._2.toLocalDateTime(); long millis = ChronoUnit.MILLIS.between(parsedDate, now); - mapper.readValue(t._1, Person.class); + Person p = mapper.readValue(t._1, Person.class); stats.treatStats(millis); - return millis; - }, Encoders.bean(Long.class)); + return p; + }, Encoders.bean(Person.class)); - query = json.writeStream() + query = ds.writeStream() .outputMode(OutputMode.Append()) .format("memory").queryName("test") .trigger(Trigger.Continuous(SparkContinuousInterval, TimeUnit.MILLISECONDS)) .start(); - //await query.awaitTermination(); } catch (Exception e) { logger.error("Error " + e.getMessage()); + + assert query != null; if (query.isActive()) { query.stop(); - spark.close(); + spark.stop(); } - } - } -} - - - + } + } +} \ No newline at end of file diff --git a/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaFlink.java b/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaFlink.java index 7731d37..7f3aa4a 100644 --- a/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaFlink.java +++ b/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaFlink.java @@ -12,7 +12,7 @@ import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.functions.AssignerWithPunctuatedWatermarks; import org.apache.flink.streaming.api.watermark.Watermark; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer010; -import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.log4j.Logger; import java.time.Instant; @@ -28,9 +28,10 @@ public class KafkaFlink { private final static Logger logger = Logger.getLogger(KafkaFlink.class); + private static final ObjectMapper mapper = new ObjectMapper(); public static class TimestampsFetcher implements AssignerWithPunctuatedWatermarks<String> { - UtilStats stats = new UtilStats(); + final UtilStats stats = new UtilStats("KafkaFlink"); @Override public long extractTimestamp(String element, long previousElementTimestamp) { @@ -61,13 +62,12 @@ public class KafkaFlink { // set up the streaming execution environment final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); - env.enableCheckpointing(100); + env.enableCheckpointing(150); Properties properties = new Properties(); properties.setProperty("bootstrap.servers", brokers); properties.setProperty("auto.offset.reset", "latest"); - properties.setProperty(ProducerConfig.CLIENT_ID_CONFIG, "flink"); - + properties.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "Flink"); FlinkKafkaConsumer010<String> myConsumer = new FlinkKafkaConsumer010<>(topic, new SimpleStringSchema(), properties); @@ -75,11 +75,9 @@ public class KafkaFlink { myConsumer.assignTimestampsAndWatermarks(new TimestampsFetcher()); - input.map((MapFunction<String, Person>) (String value) -> { - ObjectMapper mapper = new ObjectMapper(); - return mapper.readValue(value, Person.class); - - }).setParallelism(numPartitions).countWindowAll(1000); + input.map((MapFunction<String, Person>) (String value) -> + mapper.readValue(value, Person.class) + ).setParallelism(numPartitions).countWindowAll(1000); // execute program env.execute("Flink Streaming Kafka"); diff --git a/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSpark.java b/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSparkStreaming.java similarity index 73% rename from src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSpark.java rename to src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSparkStreaming.java index 11bb330..d7e3839 100644 --- a/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSpark.java +++ b/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaSparkStreaming.java @@ -18,7 +18,6 @@ import org.apache.spark.streaming.kafka010.ConsumerStrategies; import org.apache.spark.streaming.kafka010.KafkaUtils; import org.apache.spark.streaming.kafka010.LocationStrategies; -import java.io.IOException; import java.time.Instant; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; @@ -27,22 +26,25 @@ import java.util.*; /** * Ippon Tech 2018. */ -public class KafkaSpark { - static ObjectMapper mapper = new ObjectMapper(); +public class KafkaSparkStreaming { + private static final ObjectMapper mapper = new ObjectMapper(); - private final static Logger logger = Logger.getLogger(KafkaContinuousSpark.class); + private final static Logger logger = Logger.getLogger(KafkaSparkStreaming.class); - static Function function = (Function<ConsumerRecord<String, String>, Person>) cr -> { - LocalDateTime kafkaTimestamp = LocalDateTime.ofInstant(Instant.ofEpochMilli(cr.timestamp()), TimeZone - .getDefault().toZoneId()); - LocalDateTime now = LocalDateTime.now(); + private final static UtilStats stats = new UtilStats("KafkaSparkStreaming"); - long millis = ChronoUnit.MILLIS.between(kafkaTimestamp, now); - Person p = mapper.readValue(cr.value(), Person.class); + private static final Function function = (Function<ConsumerRecord<String, String>, Long>) cr -> { + LocalDateTime kafkaTimestamp = LocalDateTime.ofInstant(Instant.ofEpochMilli(cr.timestamp()), TimeZone + .getDefault().toZoneId()); + LocalDateTime now = LocalDateTime.now(); - UtilStats.treatStats(millis); + long millis = ChronoUnit.MILLIS.between(kafkaTimestamp, now); + Person p = mapper.readValue(cr.value(), Person.class); + // Compute data here - return p; + stats.treatStats(millis); + + return millis; }; @@ -54,27 +56,24 @@ public class KafkaSpark { Integer SparkStreamingInterval = Config.getIntProperty("spark.streaming.interval"); Integer maxPollRecords = Config.getIntProperty("max.poll.records"); + // !!! number of kafka partitions must not exceed number of cores SparkConf sparkConf = new SparkConf() .setMaster("local[*]") .set("spark.streaming.stopGracefullyOnShutdown", "true") - .set("spark.ui.enabled", "false") - .set("spark.eventLog.enabled", "false") - .set("spark.streaming.backpressure.enabled", "true") .setAppName("kafkaSparkStreaming"); sc = new JavaStreamingContext(sparkConf, Durations.milliseconds(SparkStreamingInterval)); - Map<String, Object> kafkaParams = new HashMap<>(); kafkaParams.put("bootstrap.servers", brokers); kafkaParams.put("key.deserializer", StringDeserializer.class); kafkaParams.put("value.deserializer", StringDeserializer.class); - kafkaParams.put("group.id", "KafkaSpark"); + kafkaParams.put("group.id", "KafkaSparkStreaming"); kafkaParams.put("auto.offset.reset", "latest"); kafkaParams.put("max.poll.records", maxPollRecords); - Collection<String> topics = Arrays.asList(topic); + Collection<String> topics = Collections.singletonList(topic); final JavaInputDStream<ConsumerRecord<String, String>> stream = KafkaUtils.createDirectStream( @@ -90,6 +89,7 @@ public class KafkaSpark { } catch (Exception e) { logger.error("Error " + e.getMessage()); + assert sc != null; sc.stop(true, true); } } diff --git a/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStreaming.java b/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStream.java similarity index 56% rename from src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStreaming.java rename to src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStream.java index f1bbff8..281f820 100644 --- a/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStreaming.java +++ b/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStream.java @@ -11,7 +11,6 @@ import org.apache.kafka.common.serialization.Serdes; import org.apache.kafka.streams.KafkaStreams; import org.apache.kafka.streams.StreamsConfig; import org.apache.kafka.streams.kstream.KStreamBuilder; -import org.apache.kafka.streams.kstream.Predicate; import org.apache.kafka.streams.processor.TimestampExtractor; import org.apache.log4j.Logger; @@ -25,14 +24,14 @@ import java.util.TimeZone; /** * Ippon Tech 2018. */ -public class KafkaStreaming { - static ObjectMapper mapper = new ObjectMapper(); +public class KafkaStream { + private static final ObjectMapper mapper = new ObjectMapper(); - private final static Logger logger = Logger.getLogger(KafkaStreaming.class); + private final static Logger logger = Logger.getLogger(KafkaStream.class); public static class MyTimestampExtractor implements TimestampExtractor { - UtilStats stats = new UtilStats(); + final UtilStats stats = new UtilStats("KafkaStream"); public MyTimestampExtractor() { super(); @@ -55,43 +54,38 @@ public class KafkaStreaming { } public static void main(String[] args) { + KafkaStreams streams; try { - String brokers = Config.getProperty("bootstrap.servers"); - String topic = Config.getProperty("topic"); - String numPartitions = Config.getProperty("numPartitions"); + String brokers = Config.getProperty("bootstrap.servers"); + String topic = Config.getProperty("topic"); + String numPartitions = Config.getProperty("numPartitions"); - Properties props = new Properties(); + Properties props = new Properties(); - props.put(StreamsConfig.APPLICATION_ID_CONFIG, "kafka stream"); - props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, brokers); - props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName()); - props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName()); - props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest"); - props.put(StreamsConfig.DEFAULT_TIMESTAMP_EXTRACTOR_CLASS_CONFIG, MyTimestampExtractor.class); - props.put(StreamsConfig.NUM_STREAM_THREADS_CONFIG, numPartitions); + props.put(StreamsConfig.APPLICATION_ID_CONFIG, "kafka stream"); + props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, brokers); + props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName()); + props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName()); + props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest"); + props.put(StreamsConfig.DEFAULT_TIMESTAMP_EXTRACTOR_CLASS_CONFIG, MyTimestampExtractor.class); + props.put(StreamsConfig.NUM_STREAM_THREADS_CONFIG, numPartitions); - KStreamBuilder builder = new KStreamBuilder(); + KStreamBuilder builder = new KStreamBuilder(); - builder.stream(Serdes.String(), Serdes.String(), topic).filter(new Predicate<String, String>() { - @Override - public boolean test(String key, String value) { + builder.stream(Serdes.String(), Serdes.String(), topic).filter((key, value) -> { try { - - mapper.readValue(value, Person.class); - + Person p = mapper.readValue(value, Person.class); + // Compute data here } catch (IOException e) { logger.error("Error " + e.getMessage()); } return false; - } - }).print(); - + }).print(); - KafkaStreams streams = new KafkaStreams(builder, props); - - streams.start(); + streams = new KafkaStreams(builder, props); + streams.start(); } catch (Exception e) { logger.error("Error " + e.getMessage()); @@ -99,5 +93,4 @@ public class KafkaStreaming { } - } diff --git a/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.java b/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.java index 9687995..d148d65 100644 --- a/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.java +++ b/src/main/java/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.java @@ -26,7 +26,7 @@ import java.util.concurrent.TimeUnit; */ public class KafkaStructuredSpark { - private static ObjectMapper mapper = new ObjectMapper(); + private static final ObjectMapper mapper = new ObjectMapper(); private final static Logger logger = Logger.getLogger(KafkaStructuredSpark.class); @@ -41,28 +41,27 @@ public class KafkaStructuredSpark { Integer maxPollRecords = Config.getIntProperty("max.poll.records"); Integer interval = Config.getIntProperty("spark.structured.interval"); - UtilStats stats = new UtilStats(); + UtilStats stats = new UtilStats("KafkaStructuredSpark"); + // !!! number of kafka partitions must not exceed number of cores SparkConf sparkConf = new SparkConf() .setMaster("local[*]") .set("spark.streaming.stopGracefullyOnShutdown", "true") - .set("spark.ui.showConsoleProgress", "false") - .set("spark.eventLog.enabled", "false") - .set("spark.streaming.backpressure.enabled", "true") .setAppName("kafkaStructured"); spark = new SparkSession(new SparkContext(sparkConf)); - Dataset<Tuple2<String, Timestamp>> line = spark.readStream().format("kafka") + Dataset<Tuple2<String, Timestamp>> source = spark.readStream() + .format("kafka") .option("kafka.bootstrap.servers", brokers) .option("subscribe", topic) .option("max.poll.records", maxPollRecords) .option("startingOffsets", "latest") - .load() + .load() .select("value", "timestamp") .as(Encoders.tuple(Encoders.STRING(), Encoders.TIMESTAMP())); - Dataset<Person> json = line.map((MapFunction<Tuple2<String, Timestamp>, Person>) t -> { + Dataset<Person> json = source.map((MapFunction<Tuple2<String, Timestamp>, Person>) t -> { LocalDateTime now = LocalDateTime.now(); LocalDateTime parsedDate = t._2.toLocalDateTime(); @@ -78,7 +77,7 @@ public class KafkaStructuredSpark { query = json.writeStream() .outputMode(OutputMode.Append()) - .format("memory").queryName("test") + .format("memory").queryName("structured") .trigger(Trigger.ProcessingTime(interval, TimeUnit.MILLISECONDS)) .start(); @@ -86,6 +85,7 @@ public class KafkaStructuredSpark { } catch (Exception e) { logger.error("Error " + e.getMessage()); + assert query != null; if (query.isActive()) { query.stop(); spark.close(); diff --git a/src/main/java/fr/ippon/kafkaLatency/utils/Config.java b/src/main/java/fr/ippon/kafkaLatency/utils/Config.java index 1efe43f..fee37ab 100644 --- a/src/main/java/fr/ippon/kafkaLatency/utils/Config.java +++ b/src/main/java/fr/ippon/kafkaLatency/utils/Config.java @@ -1,16 +1,16 @@ package fr.ippon.kafkaLatency.utils; -import org.apache.commons.beanutils.PropertyUtilsBean; +import fr.ippon.kafkaLatency.streaming.KafkaContinuousSpark; import org.apache.commons.configuration2.PropertiesConfiguration; import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder; import org.apache.commons.configuration2.builder.fluent.Parameters; import org.apache.commons.configuration2.ex.ConfigurationException; - -import java.beans.IntrospectionException; +import org.apache.log4j.Logger; public class Config { - private static PropertiesConfiguration config; + private static final PropertiesConfiguration config; + private final static Logger logger = Logger.getLogger(KafkaContinuousSpark.class); static { try { @@ -23,16 +23,16 @@ public class Config { config = builder.getConfiguration(); } catch (ConfigurationException cex) { - + logger.error("Error " + cex.getMessage()); } } - static public String getProperty(String key) throws IntrospectionException { - return (String)config.getProperty(key); + static public String getProperty(String key) { + return (String) config.getProperty(key); } - static public Integer getIntProperty(String key) throws IntrospectionException { + static public Integer getIntProperty(String key) { return Integer.valueOf(getProperty(key)); } diff --git a/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java b/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java index 63c0d49..8ceef9e 100644 --- a/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java +++ b/src/main/java/fr/ippon/kafkaLatency/utils/UtilStats.java @@ -2,7 +2,6 @@ package fr.ippon.kafkaLatency.utils; import org.apache.log4j.Logger; -import java.beans.IntrospectionException; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; @@ -13,48 +12,49 @@ import java.util.LongSummaryStatistics; * IPPON 2018. */ public class UtilStats implements Serializable { - static List<Long> lStep = Collections.synchronizedList(new ArrayList()); - static List<Long> lTotal = Collections.synchronizedList(new ArrayList()); - private static long step; - private static long total; + private static final List<Long> lStep = Collections.synchronizedList(new ArrayList()); + private static final List<Long> lTotal = Collections.synchronizedList(new ArrayList()); + + private final long step; + private long total; + private String benchName; private final static Logger logger = Logger.getLogger(UtilStats.class); - static { - try { - step = Integer.valueOf(Config.getProperty("stats.step")); - total = Integer.valueOf(Config.getProperty("stats.total")); - } catch (IntrospectionException e) { - logger.error("Error " + e.getMessage()); - } + public UtilStats(String benchName) { + step = Integer.valueOf(Config.getProperty("stats.step")); + total = Integer.valueOf(Config.getProperty("stats.total")); + + this.benchName = benchName; } - public static void treatStats(long millis) { - synchronized (lTotal) { - synchronized (lStep) { - lStep.add(millis); + public void treatStats(long millis) { + synchronized (lStep) { + lStep.add(millis); - if (lStep.size() > (step - 1)) { - LongSummaryStatistics stats = lStep.stream() - .mapToLong((x) -> x) - .summaryStatistics(); + if (lStep.size() > (step - 1)) { + LongSummaryStatistics stats = lStep.parallelStream() + .mapToLong((x) -> x) + .summaryStatistics(); - logger.info("Stats : " + stats); - lStep.clear(); - } + logger.info("Stats (" + benchName + ") : " + stats); + lStep.clear(); } + lTotal.add(millis); if (lTotal.size() > (total - 1)) { - LongSummaryStatistics stats = lTotal.stream() + LongSummaryStatistics stats = lTotal.parallelStream() .mapToLong((x) -> x) .summaryStatistics(); - logger.info("Stats total: " + stats); + logger.info("Stats total (" + benchName + ") : " + stats); + lTotal.clear(); } } } + } diff --git a/src/main/resources/config.properties b/src/main/resources/config.properties index 6169112..36d058c 100644 --- a/src/main/resources/config.properties +++ b/src/main/resources/config.properties @@ -1,13 +1,10 @@ topic=latency-tests bootstrap.servers=localhost:9092 -#bootstrap.servers=192.168.99.100:32400 -numPartitions=1 -#numPartitions=3 +numPartitions=3 replication=1 -#replication=3 -stats.step=1000 +stats.step=10000 stats.total=100000 max.poll.records=1000 spark.continuous.interval=300 -spark.structured.interval=150 +spark.structured.interval=200 spark.streaming.interval=50 diff --git a/src/main/resources/log4j.xml b/src/main/resources/log4j.xml index 1d493b1..ba331cb 100644 --- a/src/main/resources/log4j.xml +++ b/src/main/resources/log4j.xml @@ -8,22 +8,22 @@ <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> - <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %t [%-5p] %c{2} - %m%n"/> + <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %t [%-5p] - %m%n"/> </layout> </appender> <appender name="file" class="org.apache.log4j.RollingFileAppender"> <param name="append" value="true"/> <param name="file" value="./kafka-bench.log"/> - <param name="maxBackupIndex" value="10"/> - <param name="maxFileSize" value="10MB"/> + <param name="maxBackupIndex" value="6"/> + <param name="maxFileSize" value="2MB"/> <layout class="org.apache.log4j.PatternLayout"> - <param name="ConversionPattern" value="[%-5p] - %d{dd/MM/yyyy-HH:mm:ss} - %c{2} - %m%n"/> + <param name="ConversionPattern" value="[%-5p] - %d{dd/MM/yyyy-HH:mm:ss} - %m%n"/> </layout> </appender> <appender name="async_file" class="org.apache.log4j.AsyncAppender"> - <param name="BufferSize" value="128"/> - <param name="Blocking" value="false"/> + <param name="BufferSize" value="60"/> + <param name="Blocking" value="true"/> <appender-ref ref="file"/> </appender> @@ -38,12 +38,22 @@ <appender-ref ref="console"/> <appender-ref ref="async_file"/> </logger> + <logger name="org.apache.spark" additivity="false"> + <level value="warn"/> + <appender-ref ref="console"/> + <appender-ref ref="async_file"/> + </logger> <logger name="org.apache.spark.sql.kafka010" additivity="false"> <level value="error"/> <appender-ref ref="console"/> <appender-ref ref="async_file"/> - </logger> + <logger name="fr.ippon.kafkaLatency" additivity="false"> + <level value="info"/> + <appender-ref ref="console"/> + <appender-ref ref="async_file"/> + </logger> + <logger name="org.apache.commons.beanutils" additivity="false"> <level value="error"/> <appender-ref ref="console"/> diff --git a/target/classes/config.properties b/target/classes/config.properties index 95908d6..36d058c 100644 --- a/target/classes/config.properties +++ b/target/classes/config.properties @@ -1,11 +1,10 @@ -topic=realtime.persons +topic=latency-tests bootstrap.servers=localhost:9092 -#bootstrap.servers=192.168.99.100:32400 -numPartitions=1 +numPartitions=3 replication=1 -stats.step=1000 +stats.step=10000 stats.total=100000 max.poll.records=1000 spark.continuous.interval=300 -spark.structured.interval=150 +spark.structured.interval=200 spark.streaming.interval=50 diff --git a/target/classes/fr/ippon/kafkaLatency/AlimKafka$1.class b/target/classes/fr/ippon/kafkaLatency/AlimKafka$1.class deleted file mode 100644 index 7bbe62deab2c5288a0aad9c26592d01782042363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmb7BO-lnY5Phk&YiqTBRy~R6p$ZxWZ!HBW3gRkar58bn+w7V)n=RR_=+E*bc<=}K zqr}-N-b75uyqU-3WgdC|czpwKh_wnPu;^jQ!!kpurHpcIhKa^@kD=H}`jVmMD<dzm z_)gkuai@t{@RLC3p0FyfzsaJzS1CjF)EH?yTBNC@a?=kjSEEs4_)vsH;R`2C@WhX_ ziqCRl>!8U{?yATLmst{z{2+;WC{icwW32f=1jCfB2Z@#3J&h#4rf?-gX-P@8{DF87 zJabBOU!|_~%Y!j_(fm?c(rUJ8GgP`sW&?Sma!<2A6Yb@KWc%0zI!Tp@&ZWCg`X1_4 ztYEc@A|@F&{`AGL`!6R9>wjp{m&8IDhI-@X%eEFK;$3HH%I0<t`zX+V=8MsxISEUY zal)LL+<5_erlbImVrfj?Vv6$WR|CqJrm9GF-Zg{SG1f3QX6Lbh3S|}QE)W7!pBz`2 AKmY&$ diff --git a/target/classes/fr/ippon/kafkaLatency/AlimKafka.class b/target/classes/fr/ippon/kafkaLatency/AlimKafka.class deleted file mode 100644 index aeecd2848f161a9a90a0d1b0e3a08ddba224f57a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8102 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 diff --git a/target/classes/fr/ippon/kafkaLatency/AlimKafkaOptim.class b/target/classes/fr/ippon/kafkaLatency/AlimKafkaOptim.class deleted file mode 100644 index 1439273dea8f00455c74de0177224f66c1cc129b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6706 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 Levb15e*XUf@#}mW diff --git a/target/classes/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.class b/target/classes/fr/ippon/kafkaLatency/streaming/KafkaContinuousSpark.class index b2464663c15ae3bbb221f3f782ace675c11788cf..a6317b7995d5b7d09db197b57ad90b88e4d9a09c 100644 GIT binary patch delta 2810 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 delta 3177 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%0DMH61YV!VPS{AgK<H?fR8uVLRS_@%Luve8Oj ztfJxkFt|L4wW$hk;~L91&ULsRF67{sxPc`%KeJv&65AOv!|@_^u#~|8pW#4mg2D!S za5HxDGwun@z%J}&Y@Ft6+`^K^&V0BPx3N9O2X4n6i7gt%7r0ZVgGS&kB=<7h_VGd< z^8q7w|JR7kM)nV^eaPXv6dX`+kAiza3hwh|YwZ610U+Wfb|Z&*Plbbp{<MZl2Uk7L z--Z06B}3kLj(JX{?sw4G!(+dpP%Z*?urMdNC_CdY8u?(8zSzN%9?W2QsotEDC$QY2 zFH6bgEHBqrq~s!&SL&@PIj6$qVAUz8DPSGx$Ld!7>f>1R40~{WLO1o`0X)d-`#HZD z4EK2yDtL&r%ihOQz8N<>XGHergKQ#$`NTe~ZLE9}*POyS2L@xXZ46^8Fv)!k?W{LX zp;TY*pkqbFiahSYPDz4C_~bxC7o@CA=c3L;7G}fCNGr#DR41`8g@N&0Wp<OQEek9i zW`IfH*5DC*hRtN56rW|u#fOXVIeebi9_5{G-Zhm`@YqE|B~6+@Za+3~n{@S}T@Ur4 zyBE{sh@n(cG&Ttojps5Kv&}E?M;g9J4>8w3^Z*^A2ieol_&b}A{G8+a1zyE#jLz3T E0#RJ@!2kdN diff --git a/target/classes/fr/ippon/kafkaLatency/streaming/KafkaFlink$TimestampsFetcher.class b/target/classes/fr/ippon/kafkaLatency/streaming/KafkaFlink$TimestampsFetcher.class index 835236c17466f4faa0b2be211e4225ebd1d628e8..a58defc0b73e8ea532ed154f55b8ead11fe34cc0 100644 GIT binary patch delta 837 zcmZva*-{fh6o$V^CTXT^A%;bRiovLaphgr$1G2aP3a%)E`?!E%iB&*(WmSBKynr`e zS_Lj4B~_N!K7^NE`UsY%lN2arP0g9^>2tpS@6){!{SnQ7|NZ4F(8Wtl6Q>ntYRG5; z^msJVt2s-brk?>D1~un6Z^H$TiwtQA!<rE;*>KsGjVi`85w0k%Y9U;+;kx3cVq9^{ zA+)sYFE2T?jZH76v#YP2V6d6pg*U<Eq=O#yr|0~k`D|{^(9CVaE@Fxa!yP6SQ--_T zGu-Ea;-TRYj}0C8iYJDrJTp9JS}|jILDn#fQ07@E{0ep_nptp&%=)kV^t_*&Nslit zW^<Bxl(Zqi0Y$Db;=XNaOpa|$>S>?&_|xqT<Qt_$4m;(=8j~23vDlZmM`i=K<+W&P z4JWluU@971!~INXRaOJ+m1vs;t&+K)78#jJ1^Z-<jKxZo_KqM*{&mJngiEMmo|+O~ z#x0>Up$}|}xv@|YQ(}82occs47A{g-q%Qtmsw!$NWkQ>%B}KW7I@)QFmL)hsS|015 zkFZs#I<TXI94fo&l!~N~>cm?+sk~qsWD^~vWa9~HIV_m4q)HR3riUfR6`Z$DWGcSK zj+G5BHqqWRs~MNQNz#U<$FZuWC;Flp85HR8DzvKt&7)Ht--yPG)NjSM{?$xf!3rY5 niGLBBgoe!~RgC?IASS!Y_D^z3zV!jR<>c%cI&!OT$S%A;*DPb4 delta 790 zcmZvZTXPFx7{`B`Z1URmk~EqUhjum6!<L3Llps~7sxw6erE#iOr)G?Cn-7s&7p~ly zX&sUsoiVO`2p`3G-c5utF7n^^%|6fX|9_tSky=eHfB*UAD^TRQOPX=TVV4Nw4&5Aa zDRI>07{`s2T_!kTWYXazr(BWKE@wDvWXiOiQ%t)gIIp<i3gM!WONuLstBPxDFS?@f z4BIVo^?AFe{wA83)@)^);<{#r8;YBnTg+;1Q&HT}+~uCeXHIcn^MH9xm4}K)n#VlR zJY_-ij75t=-HP_rb9OqLG1uf$^>sDBTwPhn&%AoMxFTiy7}fNXRV>x#?6)7&u~MYg zEkj%M$PW`lG$v=sD7r&#WuoD`q~FBy*NIe`L_cG%$-4+UMa|scVY8cEa?-7OdgYFs z#ZlC--U&;|v)~290^$u+Enq{*4sc4b54agS6Kk+BK$qhFC+yjb)NBga?7f$^mR)a% z7!bQbu^y0R56O;wG1<$0M#BhY;>M;O!JPJx3u6_eV^By5sUKpPnk~(}(mpJ6XXWn^ z!NjFhmeo!@C04fJoOKcvuSs&Xlf@LmSm^1=a8lIqbjY_o9myr0$w`48XhVx_XwCIU zzR~41Nd1fT{@SM7!V02ahG}i{H=;w>@@Gk{VE-XV$gwbfk%Q)$;*fkg^ARms#AW($ FegRLyQse*t diff --git a/target/classes/fr/ippon/kafkaLatency/streaming/KafkaFlink.class b/target/classes/fr/ippon/kafkaLatency/streaming/KafkaFlink.class index 6bc17a3b98ce0584b917fced8ef49f79b394e0fb..9b69329ca0b5229070d5ba269e8b682f04dc75c9 100644 GIT binary patch delta 1420 zcmZXTc~I3=6vsdJE!^Mxc~OKHmQw!Z5{*GKPFm?GLNC<BEh`I65<~=i$kw7owwYxX zUb4lsu*I@+BlkjEHFIgtR;(;-U#QFq>s)XeXL@gb_w3(u?)m<HD>K(;*6ljBr5Wh2 zQhY`*$KyJm>#6g|_n73=8+_(+V}zTy*=e_gCENWLJL^`>JfB47xZ^gD`5w1x?(kUP zai?aX<}RO97e0x*T|vFiBCJmX_h<)Em(~%yH(4Mb@_Cp>pXEGqyi4$~vmW($%oRVb zSrH+|6PhP|PIuF;bn+>mK0NKTXM9$%+Gh=Geb&+BQRC#Z&a>Vf8$33;i?(|<dE{(% z-Yp(moqW#Yc_*7aYBk$Dw)+g_1=sUM%}YMHysTZyDqhjN>g+k19d@u9Y4gJao93z3 zfLdW^hvurCwk<T-HiQQR$1=|D4X0+kX4u8+hTZJZ>^1D;4b7W|w|Lv|4(}S?<9$VR zMnP>sMoo1|S;m;kctufVbxBc`VLu<(UJ2*)n;M^4Ra0J6nUQ^55jm}-Sm6~{#%n6h zEGblkV`U{XOBGpmt>42Q2==yn60&-X<wL_qe60Dz@F^{t1BTD|TrtQ_iKN;gx^M0m z98@F?i^r?0sw)dBMio_0j~7;TN#M&Qwu<;FiQ1qr6?O-P%^cDkcJgb@HxBMw!*_gd zSL^P<ANbMk)+Yx?k!KI-Uj2XKXTvYF8h)i!^PAy!j%fZc9Ch|i!=JPm{^D;#o70Zb zYKMAfcm0P}MX<b}!YG{D+tzoD+9h6!R?6Aw$LEiRjS5K3K`+-EtAd8njIom<eY}v8 zNP^NfBa+#)Ffu&sc`D))Q+`uR=h9H8PDUBk#ZW`7oscq6b+rpq8bZm6UN$d!n$3xx zF(oE14Fu?pTt_s|fr|{I5QgO(FII*~nUQe%M$}qS0$e0#Lc6mE6GS&130%x2Vnw)= ziQ*Y=cSQHsx!iF?<vdqv&Xe3hBr}9=@)q_ai@prwEV3n<BmbBTl1qUMHj4}8OU+}x zjI>w=StjU>(s{XbY?eN*Z@%<O;65(na_MK}Gt3t)AovTI#AJeWt79HlFolpbDHq@? z<#q)OW-5hJI*Wc3F%2!SX%sWP{UX~aVTQn$%9AQ^9r<Pd<(EtTOo>GZ9HCJYPfPNt z5U`Gg?UTOlU8+ytK&D-qx~P2z|KC?Vl~hTdgX&DEjWkWQ@}ox?A$Y=@v~~mx5Hv?X z;ySX^lXEt3{&sTKh~q>eMxQ`LB3H>8;A(k7Qd-+bsJ-R{LIV<jl;qeZE@-0fR&pn9 zWOx(Vj$YMHuP^9usucE=_ScFYV75?#EH@y#iZPOiN>oXzGp7gzkR+A&%XS}N2@kTA GW&Z*!%q7$S delta 1410 zcmZXTd2mxz6vlryX>wm)FD0}gh}04OaKNfiXK)lzPzn@jg$f7-5e+o0l{P79!KFyW z4XU`%$LfNDii(0@WtV~*DlXuT3+@YwTX8{Dz;jcEamLK#oO8c>&Ud!^*5<FsZ`g5o zQwz{rb#S?WdWY#Q*D=Fktiw2KHn?2R%n&zlqqS}dh`0Tf+0)IMTU^>vZ^bN!*$$1G zTODq5n4`H}bB9aRUU%e98*rD)T$)@w=4s};G~~8jF31+jB`){#fXh;r9nIq3Yfle4 zJY<6()+`TE$RnCZT~4;uK4$d_m+m}nttVVovdZO2R=cd>DTkER%@%puinR{wY@=yp zy+i*E7TxHu$?DAx&se?1p;pu4u+`-}wrQSqDWG2SoYl{3>$Q>>G%tDsR8jMGwcn?f zdmA%ms_kCizyxoO>f<dAoY`*}!xbGSCX;owb*WfQ&)RruT0AAxFBx9u6~hi*)x2hS zoi{W)4ZC>L@D^_y-r-#@E7;lp9`Ad3!9Lw<QpvKZlj5mfB}a{dWTL#XLJ^u&RT)pz z^{gyY1j@a}U}KkI>^6MBhnkNJAG1gEiQ!W|Q=H?qgreR~C*qCK5&!3W;U#pm_{%Vx z+6Vb6Os!wm5U>Kn2ENvOWA(S1y_VrS!}sh{bR1k&nV8&lWL+vAtFBB`bS;XNPmURW z;74zlKF(jvh2B1WQtzMm+3*XkhW)f^el`5Y@0vdh2kd#f;ZOD$4)T}bZ)^QSYg1;# zJCfBkY&b-#!e1S$F&w7Vo9*Ojj#w=3Xcti_wAI_|4Dk<B%Bu+Fds{-CqSeW=cvY_w znR7B>lu!AM%20vk`JtkK2`cSUs2s%^J-lw=oaQ50qcSo>M!Bk;Aw{h>A?GaB-dmV6 zPldfxBgLhK@>oD|JkpdMj@YtRktK5KC0bcDZ#`;_7(Ol%8BBv+7$LT4b6_N+<P_p! zMhjBn?T+kju)ZURi0mUVXNzxNvgt=B`g5YZydIp-=?svY0tPZj5)UE9P^L&RGvw4L z(F=re38nIxjAj{QXklzR?|8`-WRW1HlF!g2c&XHv%^b#Y34S^?FpKeAN`@q<W&)Q< zcQMZ8a*;tvavBqvgcjOd%7~{M*-AMTQt%b>j|yFzf8{a%E5(1Z+=cKRV5z1mH|z>| z!uBliPRVPZ*WA2y<a?{4P3al@e_nG*QX_trDvOLm<Z7lUH*%1n!Y7N8)RwPE*nFaM zHd8QmJp+qR$;%$Jj=|d)v|8Y{b+~Dl;W!dvS7Pgy5b9(g(-An6sZ5g!uM#*zba%n7 zKDOj;>Bgm{?7|HUX{Lu=wEEAYPmm(65zNQ6QV=p?pG>S!78O#NDoYtUvrzD`L@kmT MFXnFU;a=|h7ZW2UC;$Ke diff --git a/target/classes/fr/ippon/kafkaLatency/streaming/KafkaSpark.class b/target/classes/fr/ippon/kafkaLatency/streaming/KafkaSpark.class deleted file mode 100644 index d052941901b78184b025bf440021bed52eb83f4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7953 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 E1(Jj-YXATM diff --git a/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming$1.class b/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming$1.class deleted file mode 100644 index fd737482c754f89b60314bc7a25b2ca7f050cb6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1662 zcmb7EU31e$6g?X|R-(!w1PE;jZGg1cjuRQ0Hf@vALK+}NPSS>&Y5TO1HjZLh@<=iR zKc&B*FTB8m>Cl-@pZlXaJ^EnA`C{O~x_7Vd-gEESv-|IVul@$GgdcUBMSUDKENEEN zVWOeohR*d(4WH@IP#?omVn5e0iZ2pxS;v?7O2gMWCb6PnRl_$LZV8lDUEhuA6e`u0 zKyfW_l)xFw_0?v-yQ{*7a@S*I$_i}hwPfff>pWPD_uWXq*zkQ7u6Z(w6qh%xz0h=f zy}&m+a<3yT87tp@YDRIWWY_iE=7S`>^LjaVV}-!6ieiE573)AgmZm3}#tde!9FJ6g z6%cIdLiU#%m>XN`Pi)nT-N0wDLPtGKT0T}vVDz!{`rKOHiKX3X%3eAO`8$HWwR@oK zco;j6B-rCSZrhh}KV%_i2<7#rAZ(kmC+&TeF_4cQnVpOSb30UyYm=ANq1~sBdy6CK zJ3&9R)m=9^jB|$xTukQVp{@J27eu72sp9>>(eSN-?{M3|Ih;3e2WtXXPd=J1Pu(-O zRTu@nhVKom<1S%R{tmNi;2!P^Ts%tcoxbZiDx{#+!!QVE4Q${C0}o&sXu{I4X<!T6 z0+UB~8n}cRfyT+5WrUq1nnR^B<^^hRPrbn6yFpT<UFrG))0N+jA6s&JN?qCOB_u3Z zcF;BVWE89LN!K$Es5Me+Ix?2KuJ4#xzmy--dAjrOkWTsW9yzT{$IEZNFzKaSsSdT9 zYm|zTwymOQuF+@+T&h&9A?m!Ky>wt&LA#x{S4#Ty9nN(E+Hmnq!nqa_)wWgKB#3NN zwdaX(^zfN876;ijs_K*$cx_dpD&F|v2J%s=Ej0M5odvHvAIJiK6g*cK=$W*FcC_{q z;yIlWO!HexgH2qdZ)6F0A0Ki>E-=GyviWxwE7I0qV5B}(7@+v*56o`<iPB%tetC(p zsqq2yg#q598Ne8zTzHmN(^2NrTS&2{=>b1MM~l&in843`s~@G<HP)XX-er80HeS!W zASOP>Y+9?1EA&Qil~pv1G&NkCnY_(5=khj}xiy)(T$}#~6LtOuIP;8w(`GH_C`Ejd ZW_^n5sjZ+&TV!|h_<){HfJs_l?0-!msz?9; diff --git a/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming$MyTimestampExtractor.class b/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming$MyTimestampExtractor.class deleted file mode 100644 index 442061a4ff662de5b36a8e55a9f2a3469920e257..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1936 zcmb7FZC4XV6n-YzWXZY$qJ>iGOGQgSU@eMTKxz%p1{ZA&pzZ0GVVS_{W@pdtq{@%# zhxW9X)1K2G;E(F*olPQ1iKphn-krH~U!J-1+?luk{P{P4+jwqa2(u>UEMzcSz#!%= zIJjxy3oKZ;h1*&zTDXI|THGt(ODtI=mbJ%<iB%I{nRvjEOB7cL!<1W%9Y2a>=)C0B zm)zw_gx--;SALK<J0vUGaG4>$;)lLkWylt%cNvV5+!qW(t{;lW_1d0@xA|T`nh{re zJlN&2ujehLp$>h@c46yi+ph`AU5nOVtC)LA#te2j3`JZDc#;URT7M6wM8$&F{P4he zq@h;Y(`&t=5@J&{Q!v~qx-vd+c*MO!(cGxx1-=MX;&?Jl>NOENrPko7@MOHdyg9we zFxXygDj62~55&L}eH6`#c$|p+HL5Ygxch?t%pFDbaMF@#wXO~!&xZ09RlMd0fiBx< zcS(<;c3GeIjb^2pHQ-dmCwni1r<PA^RtZ9(;va-u)nkJCQ~%}rz&vS@t%|J2p4jj; zea?5E?Yu6Mjq|v`aQ%a*YU3P6OnhzQAxb9JY^-C$#5Xp+McKwC9+_}$Y~ituYj|Sf zI~(8Qsf`M@ZR}vz#50Cc?_7ORkYPAI;*Mf7ES@4_GiKsMvGhce$k^%CBR5a^{SSfZ z2sO9TUQ3&n2zc&<a^;X#LL#OutLu^U4!1Pfh-<~o=?-SL%!m*psjt2lQhYzkkWR}w z5Nb_Sc|D*=qs5kIml3%RD5=fM`*Z`eZBpJhwPZ1N0<5bSXcMyf4(fwq4`dyxR=7_5 zUC}7fL|6X*u3kKWp+qf`F%O*5VJt(rLw6r_<W|{r%N2&p9a(!=QX+Fts8>RS4EH-x zzcb!$#c#D=T8`6;`VO-6J*O(o``V!6q1$)9KYHRbdMk!NgrpC;K}cq3OnpW2Bbq%# zHeDN@c>^}{7cxJ*LG}+AzowR>BnQa?_#6f%Db^ImXl6Hk@G&N6#_%aFQd}LcLDmEG zU$}9MTm$(A%wr5RP*^e=u$FSa;mo)(o;!wpH$U?`jAx@{a#kDvLS9+ujF(`NoFzGj zv-BUK$8L<?x=DKF=CGI|SVdlEX(7;~OSqh(TEG?BcZR&K;41kTWIsVIKZ#trgX^@K hr~R~dp*^R_vq+i@rs<nWM>p^Z{ViG<#C?pT@Gs1Z7zqFX diff --git a/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming.class b/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStreaming.class deleted file mode 100644 index 14242125efeb12bc2e5e1dd0eb51d5bcdf5be457..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3250 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 diff --git a/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.class b/target/classes/fr/ippon/kafkaLatency/streaming/KafkaStructuredSpark.class index 190c61aa05a58407bc59461b627469ee90fe92c2..f8bb5b8853e1cf81e60d8805713fe09a3f2a4fbe 100644 GIT binary patch delta 2355 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 Ag8%>k delta 2579 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 H^QRvJ9u+2X diff --git a/target/classes/fr/ippon/kafkaLatency/utils/Config.class b/target/classes/fr/ippon/kafkaLatency/utils/Config.class index 7ff3e9bee42d46c890d56db9610ed75f5af7cc30..9c3079bca01c40a5e6318cca263fd81431806462 100644 GIT binary patch delta 67 zcmew*_)Bm@1v?|x<VtoYM!Cs**gYAQC$n)(QWanjV-RAHW)NmjVGv=^We{aB1M;na VqAm<l4DJjP3?2;9llOAi0s!_j3=IGP delta 67 zcmew*_)Bm@1v?}6<VtoYM)}Em*gY9lCbMx&QWaznV-RMLW)NXeVGw1|1@g>*d@BZV T1{a{HJA)*H2ZPMyy&Sdx_qhxj diff --git a/target/classes/fr/ippon/kafkaLatency/utils/UtilStats.class b/target/classes/fr/ippon/kafkaLatency/utils/UtilStats.class index 8c0ccf74357c4e3d12b30fd5431088d035f1e4a5..6be66ccbd5daeef0e5b19e9eead1c455acb966e1 100644 GIT binary patch literal 3578 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 BsagO4 delta 1699 zcmZuxZBSHI7=G@(yZ7#1E`m#93#%cBE(ETEWa3ADU}mylVH#=16_*v*Slhi&^tD-9 z_8lGj(!ffKtgL`qL7SYBemTzAOjG{skAM78f1A;%={bw$HZ`;JzVA8bectDs_j&JL zDc)P0I``M9?*S~vcP8c|>_q@g(lndcgnM#uFIuG8Ecfn{(H0-mx98wN?8w1GXp;xF zft@CD5%!>6`d!jQr0Fmb#cqk~l!;wFDA?{nOjdu`K+g&jeuPcLvB$t8GCAQv(u9Lv z6McA8n#VloH}JRzPnamflQQWk15X=B4gAn0nw15r78C<YjrdJjB$lY_3l-$HICgt? z*xs|*-WiKzlAjU#)DAJJ1U1$YzpEwDS}e9ujY<m@s5G$G!n1hJz&;E6@w|l>aKOR> zge<&>mlWi$iN~F!ld$)MBhK#lu4JB$m-F!o-K+UnYvDD#Zr}|I19;Pbuy7D>Sy+S` z(XRz;4=>~-OX^E3yp4CHdDp^wIAq|kh4(RNVMyL)AwsNoWa<ITcjAs6lb{dqp@M=g zyUz~wI-Rl5>O{isZ|qDu20pTI6vxCaS7q(T_(Xx3lvE3nPJ}HTw(u#A8~98<?sE%Y z;DCahsf<i<u}Pa-pg>=jNW>E)I)OtLzQmvya8-#PU4{N>8Pb^D6Ad-Sd!h=AK0DSM zY3>k>dXq;BR%{?TDURvo+E@5moY#xA07k@R{i-<ZUMemb3%wpE-r^)Wd!pi3w_j*_ zQKhT1rz5UlMzHZl_2!*jk#=WU#TEtb_E^MDm>if<G0!t7F1Zq-&0SY+Mk7u*l1$ps z2$Lf6$_B<Pe1mZdcS;e~V6FJsQ>UB~Io`{z(+bLk?VTy|%$ihy^Q|BVH#|~s#<y~k zRa9}!DacxzQg)u1QV;qfDI>j`IUE|=I<7+WirlR{31x(VirZ-Q%w`^zFt(-=a66VF z1$a@9W!xfKIl@GPDHlhfwuaA+LThc3cJ?@26L728%Ebh91^Y)~n301+See=JC^*GR zn1HF$<S3|jjlw#O+}4wr=F3YX-|tFedK$ho3NnzJ6jV>9hGEvbt0(>LGo;L>QLod? z$j~h3@dPq7h1oPsSu8WjQk_LY07<GQC5K)$>DSMUz{Th9MmOKs&Ck1=@8^@x;{yE! z{FL!prejSg;9eO|=MqxRKZN;|CdjT;U<HL~phP<;Q3qR|pd=~EF+f3vD8^CBahz4o zvft;}-e1^Y+4&M^#Fb(>E4Y|32Pqk9Ji3UL8CCCK9Dx2OIt;Ahuff3TE6}fE>$ND~ zl;bp|7ZK`|n3ZYVe1gzywQK*Sb_3P{1aly>z^SQO`5$z}f6*Mt_5TdoSzcR$?bGm6 z<DzjCk3q{`sJ_5BW{tt}QP*3>QIf`-{bMkEr8kzTG0Yf7$;K=d=Tb#Jr<^V`E%Qdm zQ;Jo*cNsb5G|!WxhJ5~$Pv>V)$W!?-6f<WwvjXh#EVQxP*QdRKdv{?2F|xg0sDEIs pfx83H7GooKR5aowy-B8TIlgJCy_M@ip4?B)Ry=@h*P?E0`x{=xLplHe diff --git a/target/classes/log4j.xml b/target/classes/log4j.xml index 1d493b1..ba331cb 100644 --- a/target/classes/log4j.xml +++ b/target/classes/log4j.xml @@ -8,22 +8,22 @@ <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> - <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %t [%-5p] %c{2} - %m%n"/> + <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %t [%-5p] - %m%n"/> </layout> </appender> <appender name="file" class="org.apache.log4j.RollingFileAppender"> <param name="append" value="true"/> <param name="file" value="./kafka-bench.log"/> - <param name="maxBackupIndex" value="10"/> - <param name="maxFileSize" value="10MB"/> + <param name="maxBackupIndex" value="6"/> + <param name="maxFileSize" value="2MB"/> <layout class="org.apache.log4j.PatternLayout"> - <param name="ConversionPattern" value="[%-5p] - %d{dd/MM/yyyy-HH:mm:ss} - %c{2} - %m%n"/> + <param name="ConversionPattern" value="[%-5p] - %d{dd/MM/yyyy-HH:mm:ss} - %m%n"/> </layout> </appender> <appender name="async_file" class="org.apache.log4j.AsyncAppender"> - <param name="BufferSize" value="128"/> - <param name="Blocking" value="false"/> + <param name="BufferSize" value="60"/> + <param name="Blocking" value="true"/> <appender-ref ref="file"/> </appender> @@ -38,12 +38,22 @@ <appender-ref ref="console"/> <appender-ref ref="async_file"/> </logger> + <logger name="org.apache.spark" additivity="false"> + <level value="warn"/> + <appender-ref ref="console"/> + <appender-ref ref="async_file"/> + </logger> <logger name="org.apache.spark.sql.kafka010" additivity="false"> <level value="error"/> <appender-ref ref="console"/> <appender-ref ref="async_file"/> - </logger> + <logger name="fr.ippon.kafkaLatency" additivity="false"> + <level value="info"/> + <appender-ref ref="console"/> + <appender-ref ref="async_file"/> + </logger> + <logger name="org.apache.commons.beanutils" additivity="false"> <level value="error"/> <appender-ref ref="console"/> diff --git a/target/test-classes/LatencyTest.class b/target/test-classes/LatencyTest.class deleted file mode 100644 index 0d04f7fa1ec9af1fc5e9c4c977065b33607b54de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3074 zcmbVOSyvQC6#jZxTH0pGuqdLK=$HT|4hk9tLxL!7gGL82iP?&o8fd1cd(sO^HuI8m z@=x;Yiy=Pb2jt{8<>agGW)>Vg1UOw?b?Yu)-MZiH`TO5je*u`rF9wD&WpH*eO~K4z z%;Ktnk1(g>V*{P|#K1hRrJ-S_g9`jRNzrxOFtCWZG*XyJqph~t|63aEm@#k%a|Z6J zA*Y5VHFV;hj{7=3)zEp>a;#uZL)+N+iiY+Dw<tCA<}63v3oEPATNbM}CFz`75cZ1j zEVWLA?ZLX`Yv|79L?E5Q*0S`2Sq)u&Rd{8!(4f(FFt;H#Mb;M1TK2}Xf~*FX>rk&d zABaMENmL_uJg0`?hoKW#6}e*h7URr2jvEN2&M<vB*IUbOgv6UoBK1d+7F^mmp&R;f z%vhQays!|2o-D@Fu99sz397!bD3t{@q^KlD!?vib7DZ<FPG*{iPxfjaGE*9kC&CCq zbFj>XUE9qFGw16rYpKdiYB2I{=oRFmr83^vkkoT3fhLY&M8^XY50U5oHP;RNz!TLa z8LYcSzqb?1eHh{Ek%<*N*72E%&+&zhCnmncR~q_T+=Gd)@r{meO$e;gwxFYELZYN& zjmvdD7M~3rWgWJTiVnwwixCZn8xRst-TD314O!sjk4B;}u<UHXbqb;9Nhe?l$U+#n z9<TI>BcJ9iXN?uL&buh?Y-t!98;`4IFYCPYHm!o3HBiNO29CmG4SS)ZVQ9xRDmWID zqe_<bmU$zb#33o+hpQEf@TbNa3b*EG4_u3(sx?NLD0x|{T6LXlR7y#Xvb-r48_$}( z8`Yko2>DhKRs{J;Lnsy#^=1_xjWro8N#7T1tcZc8gC$x_e4Q5azArr@Z!ZbUCh-~% zQ1hyirRY?@uQ>S{I(%EoD$U34sNg4CpJd*)D$yB~qd*Oz8a6eYYi+Rm=sTI%Z>|;< zaWzcu*Ly<ye4OI_nbjGZnDth92|?7MmOW9BI-Z(%h96B#V#GvN4d>MGfg0Xdd^lCl zsO4<BWtq)IJ%#)fB~f6>Z;>>W`bx*oEVrENmP2OUyzMyBTd)N$k@xdY<K-p(Vy52` zPSKWrCN`XXy>c2PO@_-`RoSS%|IIk$n{5+fM663ZF9_StTY;R_@m#~1*YeZqJUeZp z(NB{e-eI*3N1wpM{2a0=ay-s;mT!&kj)^~@z2GE;6C67uVHZX@H)92y#M@kHbTvXP zW&8u*DZWRyk$S}sDgH!z3XipIbo|avclIUpZ5(<L*{3l`uWga{W1Im!{2xY|l0kYL zqQ?`Ary>r~>kxFD!s*C%G>M(zo{rQb9cOgB%Y}mZ9^dSJHBi4MpfVAtt{qSVFt%Y5 zTK8+vj?#7q+9(5nVS8`}1N40q6WkpmxN%C)*5Dm)fR|~8_oM~9@jc-690=Yd;Y|_V zMZ&vG&zA`AL&CdqP<ZN$@s&1bueT1bZ~xhwBfNRSTOhnedcID0Hwf?MLE)X<10H|% z#T7Sz{{b&Yc=rkK0pTsv^FzYR6W*f(!Rs?rBVz?BLY#=om26_2^(!`MQN71(%2Ab# zuZ8NsZq+%evQf5B9o(%tNmVx17OF$LRZmlujW|&)@x~SN`x}#Y=<dWz9Ellgpu0wk zn6Ynh-4BD@>}LLY$lElIL|IckqK7}86=Q*fr%NP4J1Kvjq7*K$U4X_Kw(t|aC-pCJ bJ&g{QZX3(^3ZHnkP@CPX&2H6Zw{iJDq3Dp$ -- GitLab