Confluentinc连接器。一个elasticsearch索引中的多个连接器。以特定的文档类型发布

时间:2018-08-09 06:31:59

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

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主题)中,但发布到不同的类型,这可能吗?

我尝试创建多个连接器,但问题是,每个连接器都消耗该消息,因为它是同一主题。

我试图动态创建具有特定类型的连接器,然后在其中发布,然后删除连接器。但是有时候它删除得太早了,并且并不是所有的消息都被消耗掉了(没有弹性显示)。另外,当我删除连接器并使用其他文档类型创建另一个连接器时,此新连接器会消耗一些旧消息。

有人知道如何管理吗?

2 个答案:

答案 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_AFOO_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,也不要为这种情况找到更好的解决方案 谢谢!