Debezium Postgres 和 ElasticSearch - 在 ElasticSearch 中存储复杂对象

Posted

技术标签:

【中文标题】Debezium Postgres 和 ElasticSearch - 在 ElasticSearch 中存储复杂对象【英文标题】:Debezium Postgres and ElasticSearch - Store complex Object in ElasticSearch 【发布时间】:2020-12-29 23:50:11 【问题描述】:

我在 Postgres 中有一个带有表“product”的数据库,该表通过“sales_Channel”以 1 到 n 连接。所以 1 个产品可以有多个 SalesChannel。现在我想把它转移到 ES 并保持它是最新的,所以我正在使用 debezium 和 kafka。将单个表转移到 ES 是没有问题的。我可以查询 SalesChannels 和 Products。但我需要将所有销售渠道作为结果附加的产品。如何让我 debezium 转移这个?

产品映射

    
  "settings": 
    "number_of_shards": 1
  ,
  "mappings": 
    "_doc": 
      "properties": 
        "id": 
          "type": "integer"
        
      
    
  

接收产品

   
  "name": "es-sink-product",
  "config": 
    "connector.class": "io.confluent.connect.elasticsearch.ElasticsearchSinkConnector",
    "tasks.max": "1",
    "topics": "product",
    "connection.url": "http://elasticsearch:9200",
    "transforms": "unwrap,key",
    "transforms.unwrap.type": "io.debezium.transforms.UnwrapFromEnvelope",
    "transforms.unwrap.drop.tombstones": "false",
    "transforms.unwrap.drop.deletes": "false",
    "transforms.key.type": "org.apache.kafka.connect.transforms.ExtractField$Key",
    "transforms.key.field": "id",
    "key.ignore": "false",
    "type.name": "_doc",
    "behavior.on.null.values": "delete"
  

【问题讨论】:

【参考方案1】:

您要么需要使用发件箱模式,请参阅https://debezium.io/documentation/reference/1.2/configuration/outbox-event-router.html

或者您可以使用聚合对象,请参阅 https://github.com/debezium/debezium-examples/tree/master/jpa-aggregations https://github.com/debezium/debezium-examples/tree/master/kstreams-fk-join

【讨论】:

以上是关于Debezium Postgres 和 ElasticSearch - 在 ElasticSearch 中存储复杂对象的主要内容,如果未能解决你的问题,请参考以下文章

Kafka Connect Debezium postgres

debezium 是不是支持捕获 postgres 模式更改事件?

Debezium Postgres 和 ElasticSearch - 在 ElasticSearch 中存储复杂对象

debezium postgres 找不到`io/debezium/util/IoUtil`

Debezium 导致 Postgres 耗尽 RDS 上的磁盘空间

如何在单个 Postgres 服务器中将 Embedded Debezium 用于多个数据库?