kafka拉取mysql数据库_kafka里信息用flink获取后放入mysql

本文介绍了如何配置和运行一个Flink应用程序,该程序从Kafka消费者端读取数据,然后将数据写入MySQL数据库。首先安装Zookeeper和Kafka,启动服务,接着在MySQL中创建表。然后在Flink项目中添加必要的依赖,包括Flink、Kafka和Scala库。在Java代码中,创建FlinkKafkaConsumer订阅Kafka主题,并通过SimpleStringSchema解析消息,将数据映射为Student对象,最后将数据写入自定义的MySQL Sink。
摘要由CSDN通过智能技术生成

1. 安装zookeeper, kafka

2. 启动zookeeper, kafka server

3. 准备工作

在Mysql数据库创建一个table, t_student

加入maven需要的flink资源

1.10.0

2.12

org.scala-lang

scala-library

2.12.7

org.apache.flink

flink-streaming-scala_${scala.binary.version}

${flink.version}

org.apache.flink

flink-scala_${scala.binary.version}

${flink.version}

org.apache.flink

flink-connector-kafka-0.10_${scala.binary.version}

${flink.version}

org.apache.flink

flink-java

${flink.version}

compile

org.apache.flink

flink-streaming-java_${scala.binary.version}

${flink.version}

compile

消费端importcom.alibaba.fastjson.JSON;importorg.apache.flink.api.common.serialization.SimpleStringSchema;importorg.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;importorg.apache.flink.streaming.api.environment.StreamExecutionEnvironment;importorg.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer010;importjava.util.Properties;public classConsumerMain {

public static voidmain(String[] args) throwsException {

finalStreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();Properties props = newProperties();props.put("bootstrap.servers","localhost:9092");props.put("zookeeper.connect","localhost:2181");props.put("group.id","metric-group");props.put("key.deserializer","org.apache.kafka.common.serialization.StringDeserializer");props.put("value.deserializer","org.apache.kafka.common.serialization.StringDeserializer");props.put("auto.offset.reset","latest");SingleOutputStreamOperator student = env.addSource(newFlinkKafkaConsumer010<>(

"student",newSimpleStringSchema(),props)).setParallelism(1)

.map(string -> JSON.parseObject(string,Student.class));student.addSink(newSinkToMySQL());env.execute("Flink add sink");}

}

public classSinkToMySQL extendsRichSinkFunction {

PreparedStatement ps;privateConnection connection;/*****@paramparameters*@throwsException*/@Overridepublic voidopen(Configuration parameters) throwsException {

super.open(parameters);connection= getConnection();String sql = "insert into t_student(id, name, address, age) values(?, ?, ?, ?);";ps= this.connection.prepareStatement(sql);}

@Overridepublic voidclose() throwsException {

super.close();if(connection!= null) {

connection.close();}

if(ps!= null) {

ps.close();}

}

/*** @param value* @param context* @throws Exception*/@Overridepublic voidinvoke(Student value,Context context) throwsException {

System.out.println(" value: "+ JSON.toJSONString(value));ps.setInt(1,value.getId());ps.setString(2,value.getName());ps.setString(3,value.getAddress());ps.setInt(4,value.getAge());ps.executeUpdate();}

privateConnection getConnection() throwsSQLException {

Connection con = null;try{

Class.forName("com.mysql.jdbc.Driver");con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","Myh090928");} catch(Exception e) {

System.out.println("-----------mysql get connection has exception , msg = "+ e.getMessage());}

returncon;}

}

具体代码可以从这下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值