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.components.Versioned, 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>, org.apache.kafka.connect.components.Versioned
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>
     
    private final MongoDataConverter
     
    private final EventRouterDelegate<R>
     
    private boolean
     
    private String
     
    private String
     
    private final org.bson.json.JsonWriterSettings
     
    private static final org.slf4j.Logger
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    apply(R r)
     
    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.
    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.
    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.
    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.
    void
     
    org.apache.kafka.common.config.ConfigDef
     
    void
    configure(Map<String,?> configMap)
     
    private <T> Map<String,T>
    convertConfigMap(Map<String,T> oldConfigMap)
    Converts MongoDB Outbox Event Router-style configMap to relational one
    private Map<String,String>
    Creates configuration properties converter to convert MongoDB Outbox Event Router's to relational one.
    private R
    expandAfterField(R originalRecord)
    Replaces after field by parsing and expanding original JSON string to Struct type.
    private <T> boolean
     
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • 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 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 Details

    • MongoEventRouter

      public MongoEventRouter()
  • Method Details

    • 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
    • version

      public String version()
      Specified by:
      version in interface org.apache.kafka.connect.components.Versioned
    • 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:
      IllegalStateException - if after field of original Record is not an expected form
    • 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