我之所以问这个问题,是因为在原始案例Elastic Kafka Connector, ID Creation中没有答案。
我也有类似情况。
弹性搜索表,用于通过kafkaconnect发送请求时为单个字段创建记录,但不为多个字段创建记录。
获取异常在弹性搜索中“键用作文档ID,不能为空” 。
我的连接器配置:
{
"name": "test-connector33",
"config": {
"connector.class":"io.confluent.connect.elasticsearch.ElasticsearchSinkConnector",
"tasks.max": "1",
"topics": "test-connector33",
"connection.url": "http://localhost:9200",
"type.name": "aggregator",
"schema.ignore": "true",
"topic.schema.ignore": "true",
"topic.key.ignore": "false",
"value.converter": "org.apache.kafka.connect.json.JsonConverter",
"value.converter.schemas.enable": "false",
"key.converter": "org.apache.kafka.connect.json.JsonConverter",
"key.converter.schemas.enable": "false",
"key.ignore":"false",
"name": "test-connector33",
"transforms": "InsertKey,extractKey",
"transforms.InsertKey.type":"org.apache.kafka.connect.transforms.ValueToKey",
"transforms.InsertKey.fields":"customerId,city",
"transforms.extractKey.type":"org.apache.kafka.connect.transforms.ExtractField$Key",
"transforms.extractKey.field":"customerId,city"
}}
任何想法如何解决这个问题?
谢谢!
答案 0 :(得分:0)
org.apache.kafka.connect.transforms.ExtractField$Key
仅支持单个字段。
假设您的JSON对象是HashMap<String, Object>
。您找不到字段customerId,city
,因此map.get(field)
操作将返回null
,因此将该字段设置为null。
如果要通过控制台生产者发送密钥,欢迎这样做,方法是将--property print.key=true
添加为标志,然后键入密钥,按Tab键,然后输入值。如果要将数据回显到过程中,则还可以为竖线设置--property key.separator='|'
,并添加--property parse.key=true