Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Z
ZHHT-IRN-BD-ANALYSIS
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李凯旋
ZHHT-IRN-BD-ANALYSIS
Commits
68ada241
Commit
68ada241
authored
Dec 15, 2022
by
芮蒙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2022-12-14 切换使用旅行信息进行计算行车情况相关指标
parent
038fb0cc
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
105 additions
and
8 deletions
+105
-8
TravelCarInfoCoProcessFunction.java
...om/zhht/irn/functions/TravelCarInfoCoProcessFunction.java
+0
-0
TravelSituationAnalysisJob.java
...ain/java/com/zhht/irn/job/TravelSituationAnalysisJob.java
+18
-8
TravelLaneInfoSink.java
...g/src/main/java/com/zhht/irn/sink/TravelLaneInfoSink.java
+87
-0
No files found.
realtime/hologram-streaming/src/main/java/com/zhht/irn/functions/TravelCarInfoCoProcessFunction.java
View file @
68ada241
This diff is collapsed.
Click to expand it.
realtime/hologram-streaming/src/main/java/com/zhht/irn/job/TravelSituationAnalysisJob.java
View file @
68ada241
...
...
@@ -3,17 +3,21 @@ package com.zhht.irn.job;
import
com.zhht.irn.entity.dto.CycleSignalData
;
import
com.zhht.irn.entity.dto.TravelEvent
;
import
com.zhht.irn.entity.dto.TravelInfo
;
import
com.zhht.irn.entity.dto.TravelLineSinkInfo
;
import
com.zhht.irn.functions.TravelCarInfoCoProcessFunction
;
import
com.zhht.irn.functions.TravelEventAndCycleCoProcessFunction
;
import
com.zhht.irn.schema.CycleSignalKafkaSchema
;
import
com.zhht.irn.schema.TravelEventKafkaSchema
;
import
com.zhht.irn.schema.TravelInfoKafkaSchema
;
import
com.zhht.irn.sink.TravelLaneInfoSink
;
import
org.apache.flink.api.common.restartstrategy.RestartStrategies
;
import
org.apache.flink.api.common.serialization.SimpleStringSchema
;
import
org.apache.flink.api.common.time.Time
;
import
org.apache.flink.api.java.functions.KeySelector
;
import
org.apache.flink.streaming.api.CheckpointingMode
;
import
org.apache.flink.streaming.api.datastream.ConnectedStreams
;
import
org.apache.flink.streaming.api.datastream.DataStreamSource
;
import
org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator
;
import
org.apache.flink.streaming.api.environment.CheckpointConfig
;
import
org.apache.flink.streaming.api.environment.StreamExecutionEnvironment
;
import
org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer
;
...
...
@@ -21,6 +25,7 @@ import org.apache.kafka.clients.consumer.ConsumerConfig;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.List
;
import
java.util.Properties
;
/**
...
...
@@ -39,7 +44,7 @@ public class TravelSituationAnalysisJob {
// checkpoint配置
CheckpointConfig
checkpointConfig
=
env
.
getCheckpointConfig
();
// checkpoint时间间隔3分钟
checkpointConfig
.
setCheckpointInterval
(
1
*
60
*
1000
);
checkpointConfig
.
setCheckpointInterval
(
1
*
60
*
1000
);
// 两次checkpoint中最短时间间隔1分钟
checkpointConfig
.
setMinPauseBetweenCheckpoints
(
60
*
1000
);
...
...
@@ -49,7 +54,7 @@ public class TravelSituationAnalysisJob {
env
.
getCheckpointConfig
().
setCheckpointingMode
(
CheckpointingMode
.
EXACTLY_ONCE
);
//设置重启策略
env
.
setRestartStrategy
(
RestartStrategies
.
fixedDelayRestart
(
1
,
Time
.
seconds
(
10
)));
env
.
setRestartStrategy
(
RestartStrategies
.
fixedDelayRestart
(
1
,
Time
.
seconds
(
10
)));
/*
关于flink checkpoint存储的设置统一在集群配置文件中设置
...
...
@@ -83,18 +88,20 @@ public class TravelSituationAnalysisJob {
// FlinkKafkaConsumer<TravelInfo> travelInfo = new FlinkKafkaConsumer<>("trips_info", new TravelInfoKafkaSchema(), kafkaProperties);
FlinkKafkaConsumer
<
TravelInfo
>
travelInfo
=
new
FlinkKafkaConsumer
<>(
"t_info2"
,
new
TravelInfoKafkaSchema
(),
kafkaProperties
);
// FlinkKafkaConsumer<String> travelInfo = new FlinkKafkaConsumer<>("t_info2", new SimpleStringSchema(), kafkaProperties);
FlinkKafkaConsumer
<
TravelInfo
>
travelInfo
=
new
FlinkKafkaConsumer
<>(
"trips_info"
,
new
TravelInfoKafkaSchema
(),
kafkaProperties
);
travelInfo
.
setStartFromEarliest
();
DataStreamSource
<
TravelInfo
>
travelInfoStream
=
env
.
addSource
(
travelInfo
).
setParallelism
(
3
);
travelInfoStream
.
print
();
//
travelInfoStream.print();
//周期信号
// FlinkKafkaConsumer<CycleSignalData> cycleSignalData = new FlinkKafkaConsumer<>("signal_cycle_data", new CycleSignalKafkaSchema(), kafkaProperties2);
FlinkKafkaConsumer
<
CycleSignalData
>
cycleSignalData
=
new
FlinkKafkaConsumer
<>(
"s
_data2
"
,
new
CycleSignalKafkaSchema
(),
kafkaProperties2
);
FlinkKafkaConsumer
<
CycleSignalData
>
cycleSignalData
=
new
FlinkKafkaConsumer
<>(
"s
ignal_cycle_data
"
,
new
CycleSignalKafkaSchema
(),
kafkaProperties2
);
cycleSignalData
.
setStartFromEarliest
();
DataStreamSource
<
CycleSignalData
>
cycleSignalDataStream
=
env
.
addSource
(
cycleSignalData
);
cycleSignalDataStream
.
print
();
//
cycleSignalDataStream.print();
//2、使用connect,把2个流联合处理
ConnectedStreams
<
TravelInfo
,
CycleSignalData
>
connect
=
travelInfoStream
...
...
@@ -105,8 +112,10 @@ public class TravelSituationAnalysisJob {
(
KeySelector
<
CycleSignalData
,
String
>)
cycleSignalData1
->
cycleSignalData1
.
getCrossCode
()
);
travelInfoCycleSignalDataConnectedStreams
.
process
(
new
TravelCarInfoCoProcessFunction
()).
setParallelism
(
3
);
SingleOutputStreamOperator
<
List
<
TravelLineSinkInfo
>>
sinkDataStream
=
travelInfoCycleSignalDataConnectedStreams
.
process
(
new
TravelCarInfoCoProcessFunction
()).
setParallelism
(
3
);
sinkDataStream
.
addSink
(
new
TravelLaneInfoSink
()).
setParallelism
(
3
);
env
.
execute
(
"TravelSituationAnalysisJob"
);
...
...
@@ -114,5 +123,6 @@ public class TravelSituationAnalysisJob {
e
.
printStackTrace
();
}
}
}
realtime/hologram-streaming/src/main/java/com/zhht/irn/sink/TravelLaneInfoSink.java
0 → 100644
View file @
68ada241
package
com
.
zhht
.
irn
.
sink
;
import
com.alibaba.druid.pool.DruidPooledConnection
;
import
com.zhht.irn.entity.dto.TravelLineSinkInfo
;
import
com.zhht.irn.utils.DruidConnectPoolUtils
;
import
org.apache.flink.configuration.Configuration
;
import
org.apache.flink.streaming.api.functions.sink.RichSinkFunction
;
import
java.sql.PreparedStatement
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
java.util.List
;
/**
* TravelLaneInfoSink
*
* @author Rui meng
* @description 行车情况信息sink
* @date 2022/12/15 9:39
*/
public
class
TravelLaneInfoSink
extends
RichSinkFunction
<
List
<
TravelLineSinkInfo
>>
{
private
transient
DruidPooledConnection
connection
;
@Override
public
void
open
(
Configuration
parameters
)
throws
Exception
{
super
.
open
(
parameters
);
connection
=
DruidConnectPoolUtils
.
getDataSource
(
"jdbc:mysql://10.243.0.26:3306/test?characterEncoding=utf8"
,
"root"
,
"mima"
).
getConnection
();
}
@Override
public
void
close
()
throws
Exception
{
super
.
close
();
connection
.
close
();
}
@Override
public
void
invoke
(
List
<
TravelLineSinkInfo
>
value
,
Context
context
)
throws
Exception
{
super
.
invoke
(
value
,
context
);
String
sql
=
"INSERT INTO test.app_cross_line_travel_car_info"
+
"(record_date,cross_id,statistic_time,cycle_begin_time,cycle_end_time, lane_id, cycle_order, direction,"
+
" flow_direction, pass_numbers,"
+
" last_car_inCross_time, average_pass_time, average_pass_speed, average_control_delay, "
+
"average_stop_delay, average_stop_times, average_car_head_time_gap"
+
")"
+
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?) "
;
PreparedStatement
preparedStatement
=
connection
.
prepareStatement
(
sql
);
//TODO 这里的时间使用数据携带的时间,使用最后进入路口车辆的时间,这样在补数据时,可以补充到对应的分区下
Date
date
=
new
Date
();
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
SimpleDateFormat
sdf2
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
String
statistic_time
=
sdf
.
format
(
date
);
for
(
TravelLineSinkInfo
t
:
value
)
{
// 使用事件数据的时间划分数据分区,这样可以进行补数操作
String
record_date
=
sdf2
.
format
(
t
.
getLast_car_inCross_time
());
preparedStatement
.
setString
(
1
,
record_date
);
preparedStatement
.
setString
(
2
,
t
.
getCross_id
());
preparedStatement
.
setString
(
3
,
statistic_time
);
preparedStatement
.
setString
(
4
,
sdf
.
format
(
t
.
getCycle_begin_time
()));
preparedStatement
.
setString
(
5
,
sdf
.
format
(
t
.
getCycle_end_time
()));
preparedStatement
.
setString
(
6
,
t
.
getLane_id
());
preparedStatement
.
setString
(
7
,
t
.
getCycle_id
().
toString
());
preparedStatement
.
setString
(
8
,
t
.
getDirection
());
preparedStatement
.
setString
(
9
,
t
.
getFlow_direction
());
preparedStatement
.
setInt
(
10
,
t
.
getPass_numbers
());
preparedStatement
.
setLong
(
11
,
t
.
getLast_car_inCross_time
());
preparedStatement
.
setDouble
(
12
,
t
.
getAverage_pass_time
());
preparedStatement
.
setDouble
(
13
,
t
.
getAverage_pass_speed
());
preparedStatement
.
setDouble
(
14
,
t
.
getAverage_control_delay
());
preparedStatement
.
setDouble
(
15
,
t
.
getAverage_stop_delay
());
preparedStatement
.
setDouble
(
16
,
t
.
getAverage_stop_times
());
preparedStatement
.
setDouble
(
17
,
t
.
getAverage_car_head_time_gap
());
preparedStatement
.
addBatch
();
}
preparedStatement
.
executeBatch
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment