[英]kafka-connect-elasticsearch: When using “write.method” as upsert, is it possible to use same AVRO object on kafka topic to send partial document?
[英]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 field
和value
添加到消息正文中。
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.