Kafka connect弹性搜索ID创建多个字段不起作用

时间:2018-08-21 20:03:01

标签: elasticsearch apache-kafka apache-kafka-connect confluent

我之所以问这个问题,是因为在原始案例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"
}}

任何想法如何解决这个问题?

谢谢!

1 个答案:

答案 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