flink 例子(scala)

import org.apache.flink.api.common.functions.RuntimeContext

import org.apache.flink.api.common.serialization.SimpleStringSchema

import org.apache.flink.api.java.utils.ParameterTool

import org.apache.flink.api.scala._

import org.apache.flink.runtime.state.filesystem.FsStateBackend

import org.apache.flink.streaming.api.TimeCharacteristic

import org.apache.flink.streaming.api.scala.DataStream

import org.apache.flink.streaming.connectors.elasticsearch.{ElasticsearchSinkFunction, RequestIndexer}

import org.apache.flink.streaming.connectors.elasticsearch7.ElasticsearchSink

import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer

import org.elasticsearch.action.DocWriteRequest

import org.elasticsearch.action.index.IndexRequest

import org.elasticsearch.client.Requests

object demo{

def main(args: Array[String]): Unit = {

val env = StreamExecutionEnvironment.getExecutionEnvironment

//需要状态开启下面的配置

//env.setStateBackend(new RocksDBStateBackend(s"hdfs://${namenodeID}", true))//hdfs 作为状态后端

//env.enableCheckpointing(10 * 60 * 1000L)

//env.getCheckpointConfig.setCheckpointTimeout(10 * 60 * 1000L)

env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime) //处理时间

val props = new Properties

props.setProperty("bootstrap.servers", "host:6667")//有些是9092端口

props.setProperty("group.id", "groupId")

props.setProperty("retries", "10")

props.setProperty("retries.backoff.ms", "100")

props.put(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG, "60000")

//是否配置了权限,有的话加上下面的配置

// props.setProperty("sasl.jaas.config","org.apache.kafka.common.security.plain.PlainLoginModule required username='' password='';")

//props.setProperty("security.protocol", "SASL_PLAINTEXT");

// props.setProperty("sasl.mechanism", "PLAIN")

val myConsumer = new FlinkKafkaConsumer[String]("topicName", new SimpleStringSchema(), props)

.setStartFromEarliest()//从什么时间开始读

val stream = env.addSource(myConsumer)

.map(m => {

val list= m.split("\t")

val id = list(1)

val ts = list(2)

Demo(id,ts)

})

val httpHosts = CP.getESConf

val esSinkBuilder = new ElasticsearchSink.Builder[Demo](

httpHosts,

new ElasticsearchSinkFunction[Demo] {

def process(element: Demo, ctx: RuntimeContext, indexer: RequestIndexer) {

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

json.put("@timestamp", element.ts)

json.put("id", element.id)

val rqst: IndexRequest = Requests.indexRequest

//.id("自定义id,不加会自动生成")

.id(element.id)

.index("indexName")

.source(json)

.opType(DocWriteRequest.OpType.INDEX)

indexer.add(rqst)

}

}

)

setESConf(esSinkBuilder, 50000)

stream.addSink(esSinkBuilder.build())

.uid("write-to-es")

.name("write-to-es")

env.execute(s"demo")

}

def setESConf[T](esSinkBuilder: ElasticsearchSink.Builder[T], numMaxActions: Int) {

esSinkBuilder.setBulkFlushMaxActions(numMaxActions)

esSinkBuilder.setBulkFlushMaxSizeMb(10)

esSinkBuilder.setBulkFlushInterval(10000)

esSinkBuilder.setBulkFlushBackoff(true)

esSinkBuilder.setBulkFlushBackoffDelay(2)

esSinkBuilder.setBulkFlushBackoffRetries(3)

esSinkBuilder.setRestClientFactory(new RestClientFactory {

override def configureRestClientBuilder(restClientBuilder: RestClientBuilder): Unit = {

restClientBuilder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {

override def customizeRequestConfig(requestConfigBuilder: RequestConfig.Builder): RequestConfig.Builder = {

requestConfigBuilder.setConnectTimeout(12000)

requestConfigBuilder.setSocketTimeout(90000)

}

})

}

})

}

}

case class Demo(id: String, ts: String)

相关推荐
TM1Club7 小时前
AI驱动的预测:新的竞争优势
大数据·人工智能·经验分享·金融·数据分析·自动化
zhang133830890757 小时前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
电商API_180079052479 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
龙山云仓9 小时前
No140:AI世间故事-对话康德——先验哲学与AI理性:范畴、道德律与自主性
大数据·人工智能·深度学习·机器学习·全文检索·lucene
躺柒10 小时前
读数字时代的网络风险管理:策略、计划与执行04风险指引体系
大数据·网络·信息安全·数字化·网络管理·网络风险管理
独自归家的兔12 小时前
从 “局部凑活“ 到 “全局最优“:AI 规划能力的技术突破与产业落地实践
大数据·人工智能
海域云-罗鹏12 小时前
国内公司与英国总部数据中心/ERP系统互连,SD-WAN专线实操指南
大数据·数据库·人工智能
策知道13 小时前
依托政府工作报告准备省考【经验贴】
大数据·数据库·人工智能·搜索引擎·政务
Henry-SAP13 小时前
SAP(ERP) 组织结构业务视角解析
大数据·人工智能·sap·erp·sap pp
TracyCoder12315 小时前
ElasticSearch内存管理与操作系统(一):内存分配底层原理
大数据·elasticsearch·搜索引擎