Confluentinc连接器有问题。
创建连接器时,需要指定主题(elasticsearch索引)和类型(ES中的文档类型)。
{
"name": "test-connector",
"config": {
"connector.class": "io.confluent.connect.elasticsearch.ElasticsearchSinkConnector",
"tasks.max": "1",
"topics": "test",
"key.ignore": "false",
"schema.ignore": "false",
"connection.url": "http://elastic:9200",
"type.name": "type1",
"name": "elasticsearch-sink"
}
}
我想发布在相同的索引(kafka主题)中,但发布到不同的类型,这可能吗?
我尝试创建多个连接器,但问题是,每个连接器都消耗该消息,因为它是同一主题。
我试图动态创建具有特定类型的连接器,然后在其中发布,然后删除连接器。但是有时候它删除得太早了,并且并不是所有的消息都被消耗掉了(没有弹性显示)。另外,当我删除连接器并使用其他文档类型创建另一个连接器时,此新连接器会消耗一些旧消息。
有人知道如何管理吗?
答案 0 :(得分:0)
每个连接器都可以将消息路由为一种类型。您可以使用“单个消息转换”将消息路由到不同的索引,但这不是您想要的。
我建议使用流处理将消息分为不同的主题。然后,每个主题由不同的连接器流式传输到相同的索引,但所需的类型不同。
要执行流处理,可以使用诸如Kafka Streams,Spark Streaming等之类的东西。还有KSQL,它可以让您执行以下操作:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Input:
<input id="userinput1 " value="19" type="text">
<input id="userinput2 " value="4" type="text">
Output:
<input id="result1" type="text">
<input id="result2" type="text">
然后,您将创建三个主题(CREATE STREAM FOO_TYPE_A AS SELECT * FROM FOO WHERE TYPE='A';
CREATE STREAM FOO_TYPE_B AS SELECT * FROM FOO WHERE TYPE='B';
CREATE STREAM FOO_TYPE_C AS SELECT * FROM FOO WHERE TYPE='C';
,FOO_TYPE_A
,FOO_TYPE_B
),并为其创建三个连接器,流式传输到索引FOO_TYPE_C
,但类型不同。
免责声明:我为开源KSQL项目背后的公司Confluent工作。
答案 1 :(得分:0)
我找到了一个解决方案,不幸的是它已被弃用。如果您知道更好的话,请告诉我。
摘自官方文档:
select t.* from tableA t inner join
( select type ,max(value) as value, max(date) as d_date from tableA
group by type ) as t1 on t.date =t1.d_date and t.type=t1.type
所以我创建了这样的连接器:
topic.index.map
This option is now deprecated. A future version may remove it completely. Please use single message transforms, such as RegexRouter, to map topic names to index names.
A map from Kafka topic name to the destination Elasticsearch index, represented as a list of topic:index pairs.
Type: list
Default: ""
Importance: low
现在我可以推送到主题“ old”,它将为elasticsearch“ test”索引编制索引
然后我创建了更多的连接器,并使用“ topic.index.map”:“ TOPIC_NAME :test”,我可以在同一索引上索引不同的类型
在将来的版本中,它将成为主题=>索引。汇聚团队,请不要删除topic.index.map,也不要为这种情况找到更好的解决方案 谢谢!