elasticsearch 如何在Flink上使用带ElasticSearch接头的BasicAuth,elasticsearch,apache-flink,flink-streaming,basic-authentication,elasticsearch,Apache Flink,Flink Streaming,Basic Authentication" /> elasticsearch 如何在Flink上使用带ElasticSearch接头的BasicAuth,elasticsearch,apache-flink,flink-streaming,basic-authentication,elasticsearch,Apache Flink,Flink Streaming,Basic Authentication" />

elasticsearch 如何在Flink上使用带ElasticSearch接头的BasicAuth

elasticsearch 如何在Flink上使用带ElasticSearch接头的BasicAuth,elasticsearch,apache-flink,flink-streaming,basic-authentication,elasticsearch,Apache Flink,Flink Streaming,Basic Authentication,我想在flink上使用elastic producer,但我在身份验证方面遇到了一些问题: 我的弹性搜索集群前面有Nginx,我在Nginx中使用basic auth 但使用弹性搜索连接器,我无法在url中添加基本身份验证(因为InetSocketAddress) 您有没有想过将elasticsearch连接器与basic auth一起使用 谢谢你抽出时间 这是我的代码: val configur = new java.util.HashMap[String, String] con

我想在flink上使用elastic producer,但我在身份验证方面遇到了一些问题: 我的弹性搜索集群前面有Nginx,我在Nginx中使用basic auth

但使用弹性搜索连接器,我无法在url中添加基本身份验证(因为InetSocketAddress)

您有没有想过将elasticsearch连接器与basic auth一起使用

谢谢你抽出时间

这是我的代码:

 val configur = new java.util.HashMap[String, String]

    configur.put("cluster.name", "cluster")

    configur.put("bulk.flush.max.actions", "1000")

    val transportAddresses = new java.util.ArrayList[InetSocketAddress]
    transportAddresses.add(new InetSocketAddress(InetAddress.getByName("cluster.com"), 9300))


    jsonOutput.filter(_.nonEmpty).addSink(new ElasticsearchSink(configur,
                                                                transportAddresses,
                                                                new ElasticsearchSinkFunction[String] {
      def createIndexRequest(element: String): IndexRequest = {

        val jsonMap = parse(element).values.asInstanceOf[java.util.HashMap[String, String]]

        return Requests.indexRequest()
          .index("flinkTest")
          .source(jsonMap);
      }

      override def process(element: String, ctx: RuntimeContext, indexer: RequestIndexer) {
        indexer.add(createIndexRequest(element))
      }
    }))

Flink使用Elasticsearch传输客户端,该客户端使用端口9300上的二进制协议进行连接。 您的nginx代理位于端口9200上的HTTP接口前面


Flink不会使用您的代理,因此无需提供身份验证。

如果您需要使用HTTP客户端将Flink与Elasticsearch连接起来,可以使用一种解决方案

您必须创建一个自定义函数,如以下基本java类:

包fr.gfi.keenai.streaming.io.sinks.elasticsearch5;
导入org.apache.flink.configuration.configuration;
导入org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
导入io.searchbox.client.JestClient;
导入io.searchbox.client.JestClientFactory;
导入io.searchbox.client.config.HttpClientConfig;
导入io.searchbox.core.Index;
公共类ElasticSearchJessinkFunction扩展了RichSinkFunction{
私有静态最终长serialVersionUID=-7831614642918134232L;
私人客户;
@凌驾
公共void调用(T值)引发异常{
字符串文档=convertToJsonDocument(值);
Index Index=newindex.Builder(document.Index(“您的索引名称”).type(“您的文档类型”).build();
执行(索引);
}
@凌驾
公共void open(配置参数)引发异常{
//通过工厂根据配置构造一个新的Jest客户端
JestClientFactory=新的JestClientFactory();
setHttpClientConfig(新的HttpClientConfig.Builder(“http://localhost:9200")
.多线程(真)
//默认情况下,此实现将创建不超过2个并发
//每个给定路线的连接
.defaultMaxTotalConnectionPerRoute(2)
//总共不超过20个连接
.maxTotalConnection(20)
//基本用户名和密码身份验证
.defaultCredentials(“您的用户”、“您的密码”)
.build());
client=factory.getObject();
}
私有字符串convertToJsonDocument(T值){
//待办事项
返回“{}”;
}
}
请注意,还可以使用批量操作来提高速度


本书“将Flink连接到Amazon RS”部分介绍了Flink的Jest实现示例

谢谢,我不明白有两种不同的协议,我很抱歉。但是我的flink群集和ES群集不在同一个本地网络上(不是同一个提供商),所以我需要使用HTTP客户端,但我找不到这个官方客户端flink/elastic搜索,所以我需要创建它如果你要宣传一项技术,你至少应该演示它的使用,并说明这将如何解决OP的问题。