Class MongoEventRouter<R extends org.apache.kafka.connect.connector.ConnectRecord<R>>
- java.lang.Object
-
- io.debezium.connector.mongodb.transforms.outbox.MongoEventRouter<R>
-
- All Implemented Interfaces:
Closeable,AutoCloseable,org.apache.kafka.common.Configurable,org.apache.kafka.connect.transforms.Transformation<R>
@Incubating public class MongoEventRouter<R extends org.apache.kafka.connect.connector.ConnectRecord<R>> extends Object implements org.apache.kafka.connect.transforms.Transformation<R>
Debezium MongoDB Outbox Event Router SMT- Author:
- Sungho Hwang
-
-
Field Summary
Fields Modifier and Type Field Description private org.apache.kafka.connect.transforms.ExtractField<R>afterExtractorprivate MongoDataConverterconverterprivate EventRouterDelegate<R>eventRouterDelegateprivate booleanexpandPayloadprivate StringfieldPayloadprivate StringfieldTimestampprivate org.bson.json.JsonWriterSettingsjsonWriterSettingsprivate static org.slf4j.LoggerLOGGER
-
Constructor Summary
Constructors Constructor Description MongoEventRouter()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Rapply(R r)private org.apache.kafka.connect.data.SchemabuildNewAfterSchema(String schemaName, org.bson.BsonDocument afterBsonDocument)Builds a new Schema object of STRUCT type with BsonDocument parsed from original after field JSON string using MongoDataConverter.private org.apache.kafka.connect.data.StructbuildNewAfterStruct(org.apache.kafka.connect.data.Schema afterSchema, org.bson.BsonDocument afterBsonDocument)Builds a new Struct object with previously built Schema and BsonDocument parsed from original after field JSON string using MongoDataConverter.private org.apache.kafka.connect.data.SchemabuildNewValueSchema(String valueSchemaName, org.apache.kafka.connect.data.Schema originalValueSchema, org.apache.kafka.connect.data.Schema afterSchema)Builds a new Schema object for Kafka Record's value replacing original after field with newly built Schema.private org.apache.kafka.connect.data.StructbuildNewValueStruct(org.apache.kafka.connect.data.Struct originalValueStruct, org.apache.kafka.connect.data.Schema newValueSchema, org.apache.kafka.connect.data.Struct newAfterStruct)Builds a new Struct object for Kafka Record's value replacing original after field with newly built Struct.voidclose()org.apache.kafka.common.config.ConfigDefconfig()voidconfigure(Map<String,?> configMap)private <T> Map<String,T>convertConfigMap(Map<String,T> oldConfigMap)Converts MongoDB Outbox Event Router-style configMap to relational oneprivate Map<String,String>createFieldNameConverter()Creates configuration properties converter to convert MongoDB Outbox Event Router's to relational one.private RexpandAfterField(R originalRecord)Replaces after field by parsing and expanding original JSON string to Struct type.private <T> booleanhasConfigFieldEventId(Map<String,T> configMap)
-
-
-
Field Detail
-
LOGGER
private static final org.slf4j.Logger LOGGER
-
jsonWriterSettings
private final org.bson.json.JsonWriterSettings jsonWriterSettings
-
converter
private final MongoDataConverter converter
-
fieldTimestamp
private String fieldTimestamp
-
fieldPayload
private String fieldPayload
-
expandPayload
private boolean expandPayload
-
afterExtractor
private final org.apache.kafka.connect.transforms.ExtractField<R extends org.apache.kafka.connect.connector.ConnectRecord<R>> afterExtractor
-
eventRouterDelegate
private final EventRouterDelegate<R extends org.apache.kafka.connect.connector.ConnectRecord<R>> eventRouterDelegate
-
-
Method Detail
-
config
public org.apache.kafka.common.config.ConfigDef config()
-
close
public void close()
-
configure
public void configure(Map<String,?> configMap)
- Specified by:
configurein interfaceorg.apache.kafka.common.Configurable
-
expandAfterField
private R expandAfterField(R originalRecord) throws IllegalStateException
Replaces after field by parsing and expanding original JSON string to Struct type.- Parameters:
originalRecord- an original Record from MongoDB Connector- Returns:
- a new Record of which after field is replaced with new one
- Throws:
Exception- if after field of original Record is not an expected formIllegalStateException
-
buildNewAfterSchema
private org.apache.kafka.connect.data.Schema buildNewAfterSchema(String schemaName, org.bson.BsonDocument afterBsonDocument)
Builds a new Schema object of STRUCT type with BsonDocument parsed from original after field JSON string using MongoDataConverter.- Parameters:
schemaName- a name of new Schema to be builtafterBsonDocument- a BsonDocument parsed from JSON string of after field in a change event- Returns:
- a Schema object built
-
buildNewAfterStruct
private org.apache.kafka.connect.data.Struct buildNewAfterStruct(org.apache.kafka.connect.data.Schema afterSchema, org.bson.BsonDocument afterBsonDocument)Builds a new Struct object with previously built Schema and BsonDocument parsed from original after field JSON string using MongoDataConverter.- Parameters:
afterSchema- a new Schema of after field previously built with BsonDocumentafterBsonDocument- a BsonDocument parsed from JSON string of after field in a change event- Returns:
- a Struct object built
-
buildNewValueSchema
private org.apache.kafka.connect.data.Schema buildNewValueSchema(String valueSchemaName, org.apache.kafka.connect.data.Schema originalValueSchema, org.apache.kafka.connect.data.Schema afterSchema)
Builds a new Schema object for Kafka Record's value replacing original after field with newly built Schema.- Parameters:
valueSchemaName- a name of new Schema to be builtoriginalValueSchema- an original Schema of Record's valueafterSchema- a new Schema of after field that'll replace original one- Returns:
- a Schema object built
-
buildNewValueStruct
private org.apache.kafka.connect.data.Struct buildNewValueStruct(org.apache.kafka.connect.data.Struct originalValueStruct, org.apache.kafka.connect.data.Schema newValueSchema, org.apache.kafka.connect.data.Struct newAfterStruct)Builds a new Struct object for Kafka Record's value replacing original after field with newly built Struct.- Parameters:
originalValueStruct- an original Struct of Record's valuenewValueSchema- a new Schema of Record's valuenewAfterStruct- a new Struct of after field that'll replace original one- Returns:
-
convertConfigMap
private <T> Map<String,T> convertConfigMap(Map<String,T> oldConfigMap)
Converts MongoDB Outbox Event Router-style configMap to relational one- Type Parameters:
T- a type of values of given configMap- Parameters:
oldConfigMap- an original configMap- Returns:
- a converted configMap
-
-