18
18
19
19
package com .ververica .cdc .connectors .mysql .debezium ;
20
20
21
- import org .apache .flink .configuration .Configuration ;
22
21
import org .apache .flink .util .FlinkRuntimeException ;
23
22
23
+ import com .github .shyiko .mysql .binlog .BinaryLogClient ;
24
24
import com .ververica .cdc .connectors .mysql .source .offset .BinlogOffset ;
25
+ import io .debezium .config .Configuration ;
25
26
import io .debezium .connector .mysql .MySqlConnection ;
26
27
import io .debezium .connector .mysql .MySqlConnectorConfig ;
27
- import io .debezium .relational .RelationalTableFilters ;
28
+ import io .debezium .connector .mysql .MySqlDatabaseSchema ;
29
+ import io .debezium .connector .mysql .MySqlTopicSelector ;
30
+ import io .debezium .connector .mysql .MySqlValueConverters ;
31
+ import io .debezium .jdbc .JdbcValueConverters ;
32
+ import io .debezium .jdbc .TemporalPrecisionMode ;
33
+ import io .debezium .relational .TableId ;
34
+ import io .debezium .schema .TopicSelector ;
35
+ import io .debezium .util .SchemaNameAdjuster ;
28
36
import org .slf4j .Logger ;
29
37
import org .slf4j .LoggerFactory ;
30
38
31
39
import java .sql .SQLException ;
32
40
33
- import static com .ververica .cdc .connectors .mysql .debezium .task .context .StatefulTaskContext .toDebeziumConfig ;
34
-
35
41
/** Utilities related to Debezium. */
36
42
public class DebeziumUtils {
37
43
38
44
private static final Logger LOG = LoggerFactory .getLogger (DebeziumUtils .class );
39
45
40
- /**
41
- * Creates {@link RelationalTableFilters} from configuration. The {@link RelationalTableFilters}
42
- * can be used to filter tables according to "table.whitelist" and "database.whitelist" options.
43
- */
44
- public static RelationalTableFilters createTableFilters (Configuration configuration ) {
45
- io .debezium .config .Configuration debeziumConfig = toDebeziumConfig (configuration );
46
- final MySqlConnectorConfig mySqlConnectorConfig = new MySqlConnectorConfig (debeziumConfig );
47
- return mySqlConnectorConfig .getTableFilters ();
48
- }
49
-
50
46
/** Creates and opens a new {@link MySqlConnection}. */
51
- public static MySqlConnection openMySqlConnection (Configuration configuration ) {
47
+ public static MySqlConnection openMySqlConnection (Configuration dbzConfiguration ) {
52
48
MySqlConnection jdbc =
53
49
new MySqlConnection (
54
- new MySqlConnection .MySqlConnectionConfiguration (
55
- toDebeziumConfig (configuration )));
50
+ new MySqlConnection .MySqlConnectionConfiguration (dbzConfiguration ));
56
51
try {
57
52
jdbc .connect ();
58
53
} catch (SQLException e ) {
@@ -75,6 +70,37 @@ public static void closeMySqlConnection(MySqlConnection jdbc) {
75
70
}
76
71
}
77
72
73
+ /** Creates a new {@link MySqlConnection}, but not open the connection. */
74
+ public static MySqlConnection createMySqlConnection (Configuration dbzConfiguration ) {
75
+ return new MySqlConnection (
76
+ new MySqlConnection .MySqlConnectionConfiguration (dbzConfiguration ));
77
+ }
78
+
79
+ /** Creates a new {@link BinaryLogClient} for consuming mysql binlog. */
80
+ public static BinaryLogClient createBinaryClient (Configuration dbzConfiguration ) {
81
+ final MySqlConnectorConfig connectorConfig = new MySqlConnectorConfig (dbzConfiguration );
82
+ return new BinaryLogClient (
83
+ connectorConfig .hostname (),
84
+ connectorConfig .port (),
85
+ connectorConfig .username (),
86
+ connectorConfig .password ());
87
+ }
88
+
89
+ /** Creates a new {@link MySqlDatabaseSchema} to monitor the latest MySql database schemas. */
90
+ public static MySqlDatabaseSchema createMySqlDatabaseSchema (
91
+ MySqlConnectorConfig dbzMySqlConfig , MySqlConnection connection ) {
92
+ boolean tableIdCaseInsensitive = connection .isTableIdCaseSensitive ();
93
+ TopicSelector <TableId > topicSelector = MySqlTopicSelector .defaultSelector (dbzMySqlConfig );
94
+ SchemaNameAdjuster schemaNameAdjuster = SchemaNameAdjuster .create ();
95
+ MySqlValueConverters valueConverters = getValueConverters (dbzMySqlConfig );
96
+ return new MySqlDatabaseSchema (
97
+ dbzMySqlConfig ,
98
+ valueConverters ,
99
+ topicSelector ,
100
+ schemaNameAdjuster ,
101
+ tableIdCaseInsensitive );
102
+ }
103
+
78
104
/** Fetch current binlog offsets in MySql Server. */
79
105
public static BinlogOffset currentBinlogOffset (MySqlConnection jdbc ) {
80
106
final String showMasterStmt = "SHOW MASTER STATUS" ;
@@ -104,4 +130,30 @@ public static BinlogOffset currentBinlogOffset(MySqlConnection jdbc) {
104
130
e );
105
131
}
106
132
}
133
+
134
+ // --------------------------------------------------------------------------------------------
135
+
136
+ private static MySqlValueConverters getValueConverters (MySqlConnectorConfig dbzMySqlConfig ) {
137
+ TemporalPrecisionMode timePrecisionMode = dbzMySqlConfig .getTemporalPrecisionMode ();
138
+ JdbcValueConverters .DecimalMode decimalMode = dbzMySqlConfig .getDecimalMode ();
139
+ String bigIntUnsignedHandlingModeStr =
140
+ dbzMySqlConfig
141
+ .getConfig ()
142
+ .getString (MySqlConnectorConfig .BIGINT_UNSIGNED_HANDLING_MODE );
143
+ MySqlConnectorConfig .BigIntUnsignedHandlingMode bigIntUnsignedHandlingMode =
144
+ MySqlConnectorConfig .BigIntUnsignedHandlingMode .parse (
145
+ bigIntUnsignedHandlingModeStr );
146
+ JdbcValueConverters .BigIntUnsignedMode bigIntUnsignedMode =
147
+ bigIntUnsignedHandlingMode .asBigIntUnsignedMode ();
148
+
149
+ boolean timeAdjusterEnabled =
150
+ dbzMySqlConfig .getConfig ().getBoolean (MySqlConnectorConfig .ENABLE_TIME_ADJUSTER );
151
+ return new MySqlValueConverters (
152
+ decimalMode ,
153
+ timePrecisionMode ,
154
+ bigIntUnsignedMode ,
155
+ dbzMySqlConfig .binaryHandlingMode (),
156
+ timeAdjusterEnabled ? MySqlValueConverters ::adjustTemporal : x -> x ,
157
+ MySqlValueConverters ::defaultParsingErrorHandler );
158
+ }
107
159
}
0 commit comments