elasticsearch 使用Elasticsearch Sink Connector for Kafka从由下划线分隔的两个值字段创建文档id
我试图使用Elasticsearch接收器连接器将卡夫卡主题中的记录加载到Elasticsearch,但我很难按照我希望的方式构造文档ID。我希望写入Elasticsearch的文档id是由卡夫卡主题消息中的两个值组成的,两个值之间用下划线分隔 例如: 我的卡夫卡主题值具有以下Avro模式:
elasticsearch 使用Elasticsearch Sink Connector for Kafka从由下划线分隔的两个值字段创建文档id,
elasticsearch,apache-kafka,apache-kafka-connect,
elasticsearch,Apache Kafka,Apache Kafka Connect,我试图使用Elasticsearch接收器连接器将卡夫卡主题中的记录加载到Elasticsearch,但我很难按照我希望的方式构造文档ID。我希望写入Elasticsearch的文档id是由卡夫卡主题消息中的两个值组成的,两个值之间用下划线分隔 例如: 我的卡夫卡主题值具有以下Avro模式: { "type": "record", "name": "SampleValue", "namespac
{
"type": "record",
"name": "SampleValue",
"namespace": "com.abc.test",
"fields": [
{
"name": "value1",
"type": [
"null",
{
"type": "int",
"java-class": "java.lang.Integer"
}
],
"default": null
},
{
"name": "value2",
"type": [
"null",
{
"type": "int",
"java-class": "java.lang.Integer"
}
],
"default": null
},
{
"name": "otherValue",
"type": [
"null",
{
"type": "int",
"java-class": "java.lang.Integer"
}
],
"default": null
}
]
}
我希望写入Elasticsearch的文档id是由下划线分隔的value1和value2的组合值。如果avro中的给定值
{"value1": {"int": 123}, "value2": {"int": 456}, "value3": {"int": 0}}
然后我希望Elasticsearch的文档id为123\u 456
我想不出在连接器配置中链接转换的正确方法来创建一个键,该键由两个用下划线分隔的值组成。我认为没有一个现成的消息转换可以满足您的要求
您可以使用Transform API编写自己的转换,也可以使用Kafka Streams或ksqlDB等流处理器。另一个选项是将此转换委托给弹性堆栈层。您可以创建一个执行数据更改的摄取管道,然后在Elasticsearch中创建一个策略,为给定索引执行该管道。理想情况下,Kafka Connect的Elasticsearch连接器应该有一个属性来定义要执行的摄取管道。这里有更多信息:另一种选择是在Kafka和Elasticsearch之间使用Logstash和groks,但这将极大地改变您的架构。