Skip to content

Commit 29234bb

Browse files
authored
feat | sprint1 | FRB-31 | kafka publish 설정 | 조수빈
2 parents fa17924 + d70fd2e commit 29234bb

4 files changed

Lines changed: 72 additions & 4 deletions

File tree

INF_TEST-ssla2n7kxevn6fh72-atsiotap-northeast-2amazonawscom8883/.lck

Whitespace-only changes.

src/main/java/com/monitory/data/FlinkApplication.java renamed to src/main/java/com/monitory/data/FlinkSourceApplication.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
import com.monitory.data.sources.MqttSource;
44
import com.monitory.data.transformations.TimeStampAssigner;
5+
import com.monitory.data.utils.KafkaUtil;
56
import org.apache.flink.api.common.eventtime.WatermarkStrategy;
67
import org.apache.flink.configuration.Configuration;
78
import org.apache.flink.streaming.api.datastream.DataStream;
89
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
910

10-
public class FlinkApplication {
11+
public class FlinkSourceApplication {
1112
public static void main (String [] args) throws Exception {
1213
// 1. Flink 환경 설정
1314
Configuration conf = new Configuration();
@@ -16,14 +17,15 @@ public static void main (String [] args) throws Exception {
1617
// 2. 데이터 소스
1718
DataStream<String> sourceStream = env.fromSource(new MqttSource(), WatermarkStrategy.noWatermarks(), "MQTT-Source");
1819

19-
// 3. 데이터 처리: Time Stamp 출력과 Anomaly 감지
20+
// 3. 데이터 처리: Time Stamp 출력
2021
DataStream<String> transformedStream = sourceStream
2122
.map(new TimeStampAssigner());
2223

23-
// 4. 데이터 싱크: 콘솔에 출력
24+
// 4. 데이터 싱크: 콘솔에 출력 & kafka publish
25+
transformedStream.sinkTo(KafkaUtil.createKafkaSink());
2426
transformedStream.print();
2527

2628
// 5. 실행
27-
env.execute("Flink DataStream Example");
29+
env.execute("Flink to Kafka Produce");
2830
}
2931
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.monitory.data.config;
2+
3+
import java.io.InputStream;
4+
import java.util.Properties;
5+
6+
public class KafkaConfig {
7+
private static final Properties properties = new Properties();
8+
9+
static {
10+
try (InputStream input = KafkaConfig.class.getClassLoader()
11+
.getResourceAsStream("application.properties")) {
12+
if (input == null) {
13+
throw new RuntimeException("❌ application.properties 파일을 찾을 수 없습니다.");
14+
}
15+
properties.load(input);
16+
} catch (Exception e) {
17+
throw new RuntimeException("❌ properties 파일 로딩 실패", e);
18+
}
19+
}
20+
21+
public static String get(String key) {
22+
return properties.getProperty(key);
23+
}
24+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.monitory.data.utils;
2+
3+
import com.fasterxml.jackson.databind.JsonNode;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.monitory.data.config.KafkaConfig;
6+
import org.apache.flink.api.common.serialization.SimpleStringSchema;
7+
import org.apache.flink.connector.kafka.sink.KafkaRecordSerializationSchema;
8+
import org.apache.flink.connector.kafka.sink.KafkaSink;
9+
10+
public class KafkaUtil {
11+
private static final ObjectMapper mapper = new ObjectMapper();
12+
13+
public static KafkaSink<String> createKafkaSink() {
14+
return KafkaSink.<String>builder()
15+
.setBootstrapServers(KafkaConfig.get("KAFKA_SERVER"))
16+
.setRecordSerializer(
17+
KafkaRecordSerializationSchema.<String>builder()
18+
.setValueSerializationSchema(new SimpleStringSchema())
19+
.setTopicSelector((element) -> {
20+
try {
21+
JsonNode json = mapper.readTree(element);
22+
23+
String zoneId = json.path("zoneId").asText(null);
24+
String equipId = json.path("equipId").asText(null);
25+
26+
if (zoneId != null && equipId != null) {
27+
return "EQUIPMENT";
28+
} else if (zoneId != null && equipId == null) {
29+
return "ENVIRONMENT";
30+
} else {
31+
return "sensor.unknown_topic";
32+
}
33+
34+
} catch (Exception e) {
35+
return "sensor.error_topic";
36+
}
37+
})
38+
.build()
39+
)
40+
.build();
41+
}
42+
}

0 commit comments

Comments
 (0)