Flink 1.12.1 ElasticSearch连接 Sink

Flink 1.12.1 ElasticSearch连接 Sink

参考Flink官网地址:https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/connectors/elasticsearch.html

  • Flink版本:1.12.1
  • scala版本:2.12
  • ElasticSearch版本:7.10.2

pom依赖

<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-connector-elasticsearch7 -->
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-connector-elasticsearch7_2.12</artifactId>
    <version>1.12.1</version>
</dependency>

代码

def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)

    val value: DataStream[SensorReading] = env.addSource(new SensorSource)
      .filter(_.sensor.equals("sensor_1"))
        .map(t => new SensorReading(t.sensor,t.curTime,t.curTemp))

    val hosts = new java.util.ArrayList[HttpHost]

    val host = new HttpHost("localhost", 9200)

    hosts.add(host)


    val esSinkBuilder: ElasticsearchSink.Builder[SensorReading] = new ElasticsearchSink.Builder[SensorReading](
      hosts,
      new ElasticsearchSinkFunction[SensorReading] {
        override def process(t: SensorReading, runtimeContext: RuntimeContext, requestIndexer: RequestIndexer): Unit = {
          val json: util.HashMap[String, String] = new java.util.HashMap[String, String]

          json.put("id", t.sensor)
          json.put("temperature", t.curTemp.toString)
          json.put("time", t.curTime.toString)

          val request: IndexRequest = Requests.indexRequest()
            .index("sensor_record")
            .source(json)


          requestIndexer.add(request)
        }
      }
    )


    esSinkBuilder.setBulkFlushMaxActions(1) //无界流使用此方法可以来一条进行一次写,否则会进入缓冲区。

    /*// provide a RestClientFactory for custom configuration on the internally created REST client
    esSinkBuilder.setRestClientFactory(new RestClientFactory {
      override def configureRestClientBuilder(restClientBuilder: RestClientBuilder): Unit = {
        restClientBuilder.setDefaultHeaders()
        restClientBuilder.setMaxRetryTimeoutMillis(...)
        restClientBuilder.setPathPrefix(...)
        restClientBuilder.setHttpClientConfigCallback(...)
      }
    })*/

    value.addSink(esSinkBuilder.build())

    env.execute()
  }

执行结果

GET _cat/indices?v

在这里插入图片描述

GET /sensor_record/_search

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值