簡體   English   中英

kafka-connect-elasticsearch:如何根據 Kafka 主題的 header 中的某個值刪除文檔

[英]kafka-connect-elasticsearch: How to delete document based on certain value in header of the Kafka topic

我正在使用 Kafka Connect 加快速度。 嘗試使用 Kafka Connect Elasticsearch 服務接收器連接器將我們的數據從 Kafka 移動到 Elasticsearch。 我有一個處理 stream 看起來像這樣:

來自 s3 的文件記錄->來自發布到的源應用程序的自定義處理->kafka 主題->Kafka 連接->Elastic Search

這適用於創建/更新的場景。 但是,我們要處理文件的刪除方案。 我們的應用程序發布刪除操作的事件並將其設置為 Kafka 消息中 header 值的一部分。 我們希望刪除文檔本身,而不是使用此刪除操作信息更新彈性文檔。

我們如何使用 Kafka Connect 來讀取這個 header 值並從 Elastic 中刪除給定鍵的文檔?

提前感謝您的幫助。

問候, 維卡斯

已編輯:我要轉換的消息示例:

[{
    "key": "fileid=05ffefea-a71d-4bb7-091e-08d8f9229806",
    "rownum": 0,
    "metadata": {
        "offset": 1468950,
        "partition": 3,
        "timestamp": 1617773161088,
        "__keysize": 43,
        "__valsize": 596
    },
    "headers": {
        "sub-tenant-id": "",
        "actiondate": "2021-04-07T05:26:01.0790010Z",
        "action": "uploaded",
        "contentversion": "V1"
    },
    "value": {
        "id": "fil.05ffefeaa71d4bb7091e08d8f9229806",
        "name": "4.txt",
        "volumeId": "vol.e25196dc9e2f460bb27308d8f8405691",
        "volumeName": "projdmck0405",
        "type": "text/plain",
        "subTenantId": "",
        "path": "/4.txt",
        "timeCreated": "2021-04-07T05:25:46.129Z",
        "timeModified": "2021-04-07T05:25:46.129Z",
        "urn": "urn:mycompany:product:test:app:file:fil.05ffefeaa71d4bb7091e08d8f9229806#/4.txt",
        "sizeInBytes": 76,
        "isUploaded": true,
        "archiveStatus": "None",
        "storageTier": "Standard",
        "eTag": "11fb9ec5531d90d571b331cc39e43175"
    }
}]

我正在嘗試將action header fieldvalue添加到消息正文中。

Here is the transform I used using the example: https://jcustenborder.github.io/kafka-connect-documentation/projects/kafka-connect-transform-common/transformations/examples/HeaderToField.headertofield.html

 "transforms"                            : "dropNullRecords,headerToField",

 "transforms.headerToField.type"             : "com.github.jcustenborder.kafka.connect.transform.common.HeaderToField$Value",
      "transforms.headerToField.header.mappings"  : "action:STRING:actioninbody"

我確實按照示例使用“action:STRING”的映射值嘗試了這個,然后我注意到提到的格式為:

The format is <header name>:<header type>[:field name]. 

我錯過了什么?

我能夠做到這一點。 最終編寫了一個自定義 SMT。 使用 SMT,我可以訪問連接記錄,包括 header 和值。 所以我只是將 header 值讀了一個,當遇到我感興趣的值時,我將連接記錄的值設置為 null。 除了這個 Kafka Connect 還公開了以下參數:

behavior.on.null.values
How to handle records with a non-null key and a null value (for example, Kafka tombstone records). Valid options are IGNORE, DELETE, and FAIL.

Type: string
Default: FAIL
Valid Values: (case insensitive) [DELETE, IGNORE, FAIL]
Importance: low

我將值設置為 DELETE 並開始從 ES 索引中刪除記錄。

我遵循了來自 Confluent 的自定義 SMT 示例: https://github.com/confluentinc/kafka-connect-insert-uuid

對理解概念和連接記錄 class 結構本身有很大幫助。

希望這對其他人有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM