Class MongoEventRouter<R extends org.apache.kafka.connect.connector.ConnectRecord<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 Detail

      • LOGGER

        private static final org.slf4j.Logger LOGGER
      • jsonWriterSettings

        private final org.bson.json.JsonWriterSettings jsonWriterSettings
      • 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
    • Constructor Detail

      • MongoEventRouter

        public MongoEventRouter()
    • Method Detail

      • apply

        public R apply​(R r)
        Specified by:
        apply in interface org.apache.kafka.connect.transforms.Transformation<R extends org.apache.kafka.connect.connector.ConnectRecord<R>>
      • config

        public org.apache.kafka.common.config.ConfigDef config()
        Specified by:
        config in interface org.apache.kafka.connect.transforms.Transformation<R extends org.apache.kafka.connect.connector.ConnectRecord<R>>
      • close

        public void close()
        Specified by:
        close in interface AutoCloseable
        Specified by:
        close in interface Closeable
        Specified by:
        close in interface org.apache.kafka.connect.transforms.Transformation<R extends org.apache.kafka.connect.connector.ConnectRecord<R>>
      • configure

        public void configure​(Map<String,​?> configMap)
        Specified by:
        configure in interface org.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 form
        IllegalStateException
      • 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 built
        afterBsonDocument - 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 BsonDocument
        afterBsonDocument - 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 built
        originalValueSchema - an original Schema of Record's value
        afterSchema - 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 value
        newValueSchema - a new Schema of Record's value
        newAfterStruct - 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
      • hasConfigFieldEventId

        private <T> boolean hasConfigFieldEventId​(Map<String,​T> configMap)
      • createFieldNameConverter

        private Map<String,​String> createFieldNameConverter()
        Creates configuration properties converter to convert MongoDB Outbox Event Router's to relational one.
        Returns:
        a HashMap object for converting configuration fields