Flink--sink到kafka
package com.flink.DataStream import java.util.Properties import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}
import org.apache.flink.streaming.connectors.kafka.{FlinkKafkaConsumer09, FlinkKafkaProducer09}
import org.apache.flink.streaming.api.functions.source.SourceFunction
import org.apache.flink.streaming.api.functions.source.SourceFunction.SourceContext
import org.apache.flink.api.scala._
import org.apache.kafka.common.serialization.ByteArraySerializer
/**
* Created by angel;
*/
object DataSource_kafka {
def main(args: Array[String]): Unit = {
//1指定kafka数据流的相关信息
val zkCluster = "hadoop01,hadoop02,hadoop03:2181"
val kafkaCluster = "hadoop01:9092,hadoop02:9092,hadoop03:9092"
val kafkaTopicName = "test"
val sinkKafka = "test2"
//2.创建流处理环境
val env = StreamExecutionEnvironment.getExecutionEnvironment //3.创建kafka数据流
val properties = new Properties()
properties.setProperty("bootstrap.servers", kafkaCluster)
properties.setProperty("zookeeper.connect", zkCluster)
properties.setProperty("group.id", kafkaTopicName) val kafka09 = new FlinkKafkaConsumer09[String](kafkaTopicName, new SimpleStringSchema(), properties)
//4.添加数据源addSource(kafka09)
val text = env.addSource(kafka09).setParallelism(4) /**
* test#CS#request http://b2c.csair.com/B2C40/query/jaxb/direct/query.ao?t=S&c1=HLN&c2=CTU&d1=2018-07-12&at=2&ct=2&inf=1#CS#POST#CS#application/x-www-form-urlencoded#CS#t=S&json={'adultnum':'1','arrcity':'NAY','childnum':'0','depcity':'KHH','flightdate':'2018-07-12','infantnum':'2'}#CS#http://b2c.csair.com/B2C40/modules/bookingnew/main/flightSelectDirect.html?t=R&c1=LZJ&c2=MZG&d1=2018-07-12&at=1&ct=2&inf=2#CS#123.235.193.25#CS#Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1#CS#2018-01-19T10:45:13:578+08:00#CS#106.86.65.18#CS#cookie
* */
val values: DataStream[ProcessedData] = text.map{
line =>
var encrypted = line
val values = encrypted.split("#CS#")
val valuesLength = values.length
var regionalRequest = if(valuesLength > 1) values(1) else ""
val requestMethod = if (valuesLength > 2) values(2) else ""
val contentType = if (valuesLength > 3) values(3) else ""
//Post提交的数据体
val requestBody = if (valuesLength > 4) values(4) else ""
//http_referrer
val httpReferrer = if (valuesLength > 5) values(5) else ""
//客户端IP
val remoteAddr = if (valuesLength > 6) values(6) else ""
//客户端UA
val httpUserAgent = if (valuesLength > 7) values(7) else ""
//服务器时间的ISO8610格式
val timeIso8601 = if (valuesLength > 8) values(8) else ""
//服务器地址
val serverAddr = if (valuesLength > 9) values(9) else ""
//获取原始信息中的cookie字符串
val cookiesStr = if (valuesLength > 10) values(10) else ""
ProcessedData(regionalRequest,
requestMethod,
contentType,
requestBody,
httpReferrer,
remoteAddr,
httpUserAgent,
timeIso8601,
serverAddr,
cookiesStr) }
values.print()
val remoteAddr: DataStream[String] = values.map(line => line.remoteAddr)
remoteAddr.print()
//TODO sink到kafka
val p: Properties = new Properties
p.setProperty("bootstrap.servers", "hadoop01:9092,hadoop02:9092,hadoop03:9092")
p.setProperty("key.serializer", classOf[ByteArraySerializer].getName)
p.setProperty("value.serializer", classOf[ByteArraySerializer].getName)
val sink = new FlinkKafkaProducer09[String](sinkKafka, new SimpleStringSchema(), properties)
remoteAddr.addSink(sink)
//5.触发运算
env.execute("flink-kafka-wordcunt")
}
}
//保存结构化数据
case class ProcessedData(regionalRequest: String,
requestMethod: String,
contentType: String,
requestBody: String,
httpReferrer: String,
remoteAddr: String,
httpUserAgent: String,
timeIso8601: String,
serverAddr: String,
cookiesStr: String
)
Flink--sink到kafka的更多相关文章
- 如何用Flink把数据sink到kafka多个(成百上千)topic中
需求与场景 上游某业务数据量特别大,进入到kafka一个topic中(当然了这个topic的partition数必然多,有人肯定疑问为什么非要把如此庞大的数据写入到1个topic里,历史留下的问题,现 ...
- 如何用Flink把数据sink到kafka多个不同(成百上千)topic中
需求与场景 上游某业务数据量特别大,进入到kafka一个topic中(当然了这个topic的partition数必然多,有人肯定疑问为什么非要把如此庞大的数据写入到1个topic里,历史留下的问题,现 ...
- 构建一个flink程序,从kafka读取然后写入MYSQL
最近flink已经变得比较流行了,所以大家要了解flink并且使用flink.现在最流行的实时计算应该就是flink了,它具有了流计算和批处理功能.它可以处理有界数据和无界数据,也就是可以处理永远生产 ...
- flink引出的kafka不同版本的兼容性
参考: 官网协议介绍:http://kafka.apache.org/protocol.html#The_Messages_Fetch kafka协议兼容性 http://www.cnblogs.c ...
- flink⼿手动维护kafka偏移量量
flink对接kafka,官方模式方式是自动维护偏移量 但并没有考虑到flink消费kafka过程中,如果出现进程中断后的事情! 如果此时,进程中段: 1:数据可能丢失 从获取了了数据,但是在执⾏行行 ...
- Flink SQL结合Kafka、Elasticsearch、Kibana实时分析电商用户行为
body { margin: 0 auto; font: 13px / 1 Helvetica, Arial, sans-serif; color: rgba(68, 68, 68, 1); padd ...
- An Overview of End-to-End Exactly-Once Processing in Apache Flink (with Apache Kafka, too!)
01 Mar 2018 Piotr Nowojski (@PiotrNowojski) & Mike Winters (@wints) This post is an adaptation o ...
- 关于Flink slot 和kafka topic 分区关系的说明
今天又有小伙伴在群里问 slot 和 kafka topic 分区(以下topic,默认为 kafka 的 topic )的关系,大概回答了一下,这里整理一份 首先必须明确的是,Flink Task ...
- 使用Flink时从Kafka中读取Array[Byte]类型的Schema
使用Flink时,如果从Kafka中读取输入流,默认提供的是String类型的Schema: val myConsumer = new FlinkKafkaConsumer08[String](&qu ...
- Flink 中的kafka何时commit?
https://ci.apache.org/projects/flink/flink-docs-release-1.6/internals/stream_checkpointing.html @Ove ...
随机推荐
- web@h,c小总结
问题0:元素内联元素,行内元素,行内块元素. 内联: 宽高M,P都有效 行内元素:无宽高,内容撑开,M,P左右有效 行内块元素:可设宽高,内容撑开,M,P都有 ...
- ubuntu server 14.04 上安装jdk1.8
ubuntu server 14.04 上安装jdk1.8 1.使用apt-get安装oracle-jdk安装oracle jdk sudo apt-get install python-softwa ...
- nginx https配置记录
一.证书生成: 要有两个文件,一个私钥,一个证书. 私钥:-----BEGIN PRIVATE KEY----- 开始 证书:-----BEGIN CERTIFICATE----- 开始 二.Ngin ...
- 如何安装和配置RabbitMQ
今天开始一个小小的练习,学习一下安装和配置RabbitMQ,为什么要学它,因为WCF可以完全兼容和使用RabbitMQ了.我们新的大数据系统需要使用消息队列,所以就开始研究一下,把它重新封装一下,更便 ...
- 02 编程语言、python变量
一 编程语言介绍(***) 1.1机器语言:直接用计算机能理解的二进制指令编写程序,直接控制硬件 优点:执行效率高,跨平台性低 缺点:开发效率低 1.2汇编语言:用英文标签取代二进制指令编写程序,本质 ...
- C#简单画图程序
实现过程: (1) 新建窗体应用程序 (2) 添加一个MenuScrip控件:添加一个ToolScrip控件. 在ToolScrip控件中对每个单元,要将DisplayStyle属性改为Text (3 ...
- swift 实践- 12 -- UIPickerView
import UIKit class ViewController: UIViewController , UIPickerViewDelegate,UIPickerViewDataSource{ v ...
- mysql5.7设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
注:本文来源于< mysql5.7设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy r ...
- 在java中,OOA是什么?OOD是什么?OOP是什么?
注:本文来源于< 在java中,OOA是什么?OOD是什么?OOP是什么?> 在java中,OOA是什么?OOD是什么?OOP是什么? OOA Object-Oriented Anal ...
- Confluence 6 MySQL 3.x 字符集编码问题
MySQL 3.x is 已知在大写和小写转换的时候有些问题(non-ASCII). 问题诊断 请按照 Troubleshooting Character Encodings 页面中的内容对问题进行诊 ...