Commit 315034c9 by 吴延飞

Merge remote-tracking branch 'origin/master'

parents 17d775b1 a9f4b7a4
...@@ -49,7 +49,7 @@ public class LaneNormJob { ...@@ -49,7 +49,7 @@ public class LaneNormJob {
KeySelector<TravelEvent, String> carKeySelector = new KeySelector<TravelEvent, String>() { KeySelector<TravelEvent, String> carKeySelector = new KeySelector<TravelEvent, String>() {
@Override @Override
public String getKey(TravelEvent car) throws Exception { public String getKey(TravelEvent car) throws Exception {
return car.toString(); return car.getCrossId();
} }
}; };
MapFunction<String, Cycle> getCycleFunction = new MapFunction<String, Cycle>() { MapFunction<String, Cycle> getCycleFunction = new MapFunction<String, Cycle>() {
...@@ -82,8 +82,8 @@ public class LaneNormJob { ...@@ -82,8 +82,8 @@ public class LaneNormJob {
WatermarkStrategy<TravelEvent> travelEventWatermarkStrategy = WatermarkStrategy.<TravelEvent>forBoundedOutOfOrderness((Duration.ofSeconds(3))).withTimestampAssigner((car, timestamp) -> Long.parseLong(car.getEventTime())); WatermarkStrategy<TravelEvent> travelEventWatermarkStrategy = WatermarkStrategy.<TravelEvent>forBoundedOutOfOrderness((Duration.ofSeconds(3))).withTimestampAssigner((car, timestamp) -> Long.parseLong(car.getEventTime()));
WatermarkStrategy<Cycle> cycleWatermarkStrategy = WatermarkStrategy.<Cycle>forBoundedOutOfOrderness((Duration.ofSeconds(3))).withTimestampAssigner((cycle, timestamp) -> Long.parseLong(cycle.getEndDateTime())); WatermarkStrategy<Cycle> cycleWatermarkStrategy = WatermarkStrategy.<Cycle>forBoundedOutOfOrderness((Duration.ofSeconds(3))).withTimestampAssigner((cycle, timestamp) -> Long.parseLong(cycle.getEndDateTime()));
//根据corssid 分组 保证同一路口的数据进行一个进程 //根据corssid 分组 保证同一路口的数据进行一个进程
DataStream<Cycle> cycleDataStreamSource = cycleStringStream.map(getCycleFunction).assignTimestampsAndWatermarks(cycleWatermarkStrategy).keyBy(cycleKeySelect); DataStream<Cycle> cycleDataStreamSource = cycleStringStream.map(getCycleFunction).assignTimestampsAndWatermarks(cycleWatermarkStrategy);
DataStream<TravelEvent> carStream = carStringStream.map(getTravelEventFunction).assignTimestampsAndWatermarks(travelEventWatermarkStrategy).keyBy(carKeySelector).filter(filterFunction); DataStream<TravelEvent> carStream = carStringStream.map(getTravelEventFunction).assignTimestampsAndWatermarks(travelEventWatermarkStrategy).filter(filterFunction);
ConnectedStreams<Cycle, TravelEvent> cycleTravelEventConnectedStreams = cycleDataStreamSource.connect(carStream).keyBy(cycle -> cycle.getCrossCode(), travelEvent -> travelEvent.getCrossId()); ConnectedStreams<Cycle, TravelEvent> cycleTravelEventConnectedStreams = cycleDataStreamSource.connect(carStream).keyBy(cycle -> cycle.getCrossCode(), travelEvent -> travelEvent.getCrossId());
DorisSink.Builder<String> builder = DorisUtils.getBuilder("doris.properties",args, "app_cross_dimension_norm"); DorisSink.Builder<String> builder = DorisUtils.getBuilder("doris.properties",args, "app_cross_dimension_norm");
cycleTravelEventConnectedStreams.process(new LaneNormProcessFunction()).setParallelism(4) cycleTravelEventConnectedStreams.process(new LaneNormProcessFunction()).setParallelism(4)
......
...@@ -6,6 +6,7 @@ import org.apache.flink.api.common.serialization.SimpleStringSchema; ...@@ -6,6 +6,7 @@ import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.api.common.time.Time; import org.apache.flink.api.common.time.Time;
import org.apache.flink.api.java.utils.ParameterTool; import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.runtime.state.filesystem.FsStateBackend; import org.apache.flink.runtime.state.filesystem.FsStateBackend;
import org.apache.flink.streaming.api.CheckpointingMode;
import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.CheckpointConfig; import org.apache.flink.streaming.api.environment.CheckpointConfig;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
...@@ -188,6 +189,8 @@ public class FlinkUtils { ...@@ -188,6 +189,8 @@ public class FlinkUtils {
env.setStateBackend(new FsStateBackend(checkpointPath)); env.setStateBackend(new FsStateBackend(checkpointPath));
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION); env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
env.setRestartStrategy(RestartStrategies.noRestart()); env.setRestartStrategy(RestartStrategies.noRestart());
//修改Checkpoint的模式 时廷和吞吐量要求非常高但对数据的一致性要求不高的场景。flink内部无须exactly-once检查
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.AT_LEAST_ONCE);
// 基于Kafka 原始JSON格式的字符串,获取消息流 // 基于Kafka 原始JSON格式的字符串,获取消息流
FlinkKafkaConsumer<String> kafkaConsumer = new FlinkKafkaConsumer<>(topicList, new SimpleStringSchema(), properties); FlinkKafkaConsumer<String> kafkaConsumer = new FlinkKafkaConsumer<>(topicList, new SimpleStringSchema(), properties);
kafkaConsumer.setStartFromLatest(); kafkaConsumer.setStartFromLatest();
......
driver=com.mysql.jdbc.Driver driver=com.mysql.jdbc.Driver
host=13.145.183.136 host=10.243.0.22
query.port=9030 query.port=9030
http.port=8030 http.port=8030
username=root username=root
password=Zhht2023! password=mima
database=qxlk database=qxlk
...@@ -2,6 +2,6 @@ bootstrap.servers=139.9.157.176:9092 ...@@ -2,6 +2,6 @@ bootstrap.servers=139.9.157.176:9092
kafka.input.topics=trips_info kafka.input.topics=trips_info
auto.offset.reset=latest auto.offset.reset=latest
group.id=TravelInfoJob group.id=TravelInfoJob
checkpoint.path=file:///data/flink/state checkpoint.path=hdfs://10.243.0.24:9000/data/flink/state
checkpoint.interval=60000 checkpoint.interval=60000
enable.auto.commit=true enable.auto.commit=true
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment