文件内容

项目案例: https://github.com/TaoPanfeng/case/tree/master/03-flink/flink-rabbitmq-oracle

FlinkMain.java

import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.rabbitmq.RMQSource;
import org.apache.flink.streaming.connectors.rabbitmq.common.RMQConnectionConfig; public class FlinkMain
{
public static void main(String[] args) throws Exception
{
// 1,执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 2,RabbitMQ配置
RMQConnectionConfig connectionConfig = new RMQConnectionConfig.Builder()
.setHost("192.168.1.3")
.setPort(5673)
.setUserName("panfeng")
.setPassword("panfeng")
.setVirtualHost("/panfeng")
.build(); // 3,添加资源
DataStreamSource<String> dataStreamSource = env.addSource(new RMQSource<String>(
connectionConfig,
"flink",
true,
new SimpleStringSchema())); // 4,添加到流,去执行接收到的数据进行入库
dataStreamSource.addSink(new SinkOracle()); // 5,执行工作,定义一个工作名称
env.execute("rabbitmq flink oracle");
}
}

SinkOracle.java

import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement; public class SinkOracle extends RichSinkFunction<String>
{
private Connection connection;
private PreparedStatement statement; // 1,初始化
@Override
public void open(Configuration parameters) throws Exception
{
super.open(parameters);
Class.forName("oracle.jdbc.OracleDriver");
connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "123456");
statement = connection.prepareStatement("INSERT INTO FLINK VALUES (SEQ_FLINK.NEXTVAL,?)");
} // 2,执行
@Override
public void invoke(String value, Context context) throws Exception
{
System.out.println("value.toString()-------" + value.toString());
statement.setString(1, value);
statement.execute();
} // 3,关闭
@Override
public void close() throws Exception
{
super.close();
if (statement != null)
statement.close();
if (connection != null)
connection.close();
}
}

pom.xml

<dependencies>
<!--flink-java-->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.9.0</version>
</dependency> <!--flink-streaming-java_2.11-->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>1.9.0</version>
</dependency> <!--flink-connector-rabbitmq_2.11-->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-rabbitmq_2.11</artifactId>
<version>1.9.0</version>
</dependency> <!--Oracle-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1.0</version>
</dependency>
</dependencies>

测试步骤

执行 Flink.java中的主方法,往对应队列中传入数据,可以输入到控制台

  • 如果想把配置信息写文件application.properties的话
配置文件内容

db.driver=oracle.jdbc.OracleDriver
db.url=jdbc:oracle:thin:@10.18.20.180:1521:MUDATA
db.username=MD_REF
db.password=MD_REF_2018 rmq.host=10.18.20.13
rmq.port=5672
rmq.username=camel
rmq.password=camel123
rmq.vhost=reference
rmq.exchanges=ref.muservice.input
rmq.queue.airport=two.airport.muservice.input
rmq.queue.city=two.city.muservice.input
rmq.queue.country=two.country.muservice.input

读取RabbitMQ

import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.rabbitmq.RMQSource;
import org.apache.flink.streaming.connectors.rabbitmq.common.RMQConnectionConfig; public class CountryFlinkMain
{
public static void main(String[] args) throws Exception
{
// 1,执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    // 2,读取 country.properties 配置
ParameterTool pt=ParameterTool.fromPropertiesFile("flink-crew-assign/src/main/resources/country.properties"); // 3,RabbitMQ配置
RMQConnectionConfig connectionConfig = new RMQConnectionConfig.Builder()
.setHost(pt.get("rmq.host"))
.setPort(Integer.parseInt(pt.get("rmq.port")))
.setUserName(pt.get("rmq.username"))
.setPassword(pt.get("rmq.password"))
.setVirtualHost(pt.get("rmq.vhost"))
.build(); // 4,添加资源,RMQSource(OUT)
DataStreamSource<String> dataStreamSource = env.addSource(new RMQSource<String>(
connectionConfig,
pt.get("rmq.queue.country"),// 国家
true,
new SimpleStringSchema())); // 5,添加到流,去执行接收到的数据进行入库,addSink(IN)
dataStreamSource.addSink(new CountrySinkOracle());
// 6,执行工作,定义一个工作名称
env.execute("rabbitmq flink oracle");
}

}

读取数据库

public class CountrySinkOracle extends RichSinkFunction
{
private Connection conn;
private PreparedStatement statement;
// 1,初始化
@Override
public void open(Configuration parameters) throws Exception
{
super.open(parameters);
ParameterTool pt = ParameterTool.fromPropertiesFile("flink-crew-assign/src/main/resources/country.properties");
Class.forName(pt.get("db.driver"));
conn = DriverManager.getConnection(pt.get("db.url"), pt.get("db.username"), pt.get("db.password"));
}

Flink接收RabbitMQ数据写入到Oracle的更多相关文章

  1. flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习

    1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...

  2. 将Oracle数据库中的数据写入Excel

    将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...

  3. Flink 使用(一)——从kafka中读取数据写入到HBASE中

    1.前言 本文是在<如何计算实时热门商品>[1]一文上做的扩展,仅在功能上验证了利用Flink消费Kafka数据,把处理后的数据写入到HBase的流程,其具体性能未做调优.此外,文中并未就 ...

  4. flink-----实时项目---day07-----1.Flink的checkpoint原理分析 2. 自定义两阶段提交sink(MySQL) 3 将数据写入Hbase(使用幂等性结合at least Once实现精确一次性语义) 4 ProtoBuf

    1.Flink中exactly once实现原理分析 生产者从kafka拉取数据以及消费者往kafka写数据都需要保证exactly once.目前flink中支持exactly once的sourc ...

  5. 数据导入导出Oracle数据库

    临近春节,接到了一个导入数据的任务,在Linux客户端中的数据有50G,大约3亿3千万行: 刚开始很天真,把原始的txt/csv文件用sh脚本转化成了oralce 的insert into 语句,然后 ...

  6. 记一次OGG数据写入HBase的丢失数据原因分析

    一.现象二.原因排查2.1 SparkStreaming程序排查2.2 Kafka数据验证2.3 查看OGG源码2.3.1 生成Kafka消息类2.3.2 Kafka配置类2.3.3 Kafka 消息 ...

  7. 自己写的数据交换工具——从Oracle到Elasticsearch

    先说说需求的背景,由于业务数据都在Oracle数据库中,想要对它进行数据的分析会非常非常慢,用传统的数据仓库-->数据集市这种方式,集市层表会非常大,查询的时候如果再做一些group的操作,一个 ...

  8. Java代码实现excel数据导入到Oracle

    1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码   import java.io.File; import java.io.Fi ...

  9. 简单通过java的socket&serversocket以及多线程技术实现多客户端的数据的传输,并将数据写入hbase中

    业务需求说明,由于公司数据中心处于刚开始部署的阶段,这需要涉及其它部分将数据全部汇总到数据中心,这实现的方式是同上传json文件,通过采用socket&serversocket实现传输. 其中 ...

随机推荐

  1. 自定义nagios监控脚本---磁盘检测

    自定义nagios监控脚本---磁盘检测 1. 在客户端上创建脚本/usr/local/nagios/libexec/check_disk.shvim /usr/local/nagios/libexe ...

  2. 分布式存储ceph介绍(1)

    一.Ceph简介: Ceph是一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统.ceph 的统一体现在可以提供文件系统.块存储和对象存储,分布式体现在可以动态扩展.在国内一些公司的云环 ...

  3. MongoDB 有关实体映射具体应用及对查询的影响

    1 创建实体的时候,可以用注解@Document 对实体进行设置,指定集合名字 /** * */ package com.cfj.ceshi.entity; import org.springfram ...

  4. Java数组(2):数组与泛型

    通常,数组与泛型不能很好的结合,你不能实例化具有参数化类型的数组.擦除会移除参数类型信息,而数组必须知道它们所持有的确切类型.但是我们可以参数化数组本身. import java.util.Array ...

  5. flask(1.0)

    目录 一. 关于KeyError和IndexError 二. Python三大主流框架对比 三. flask基础 1.安装flask 2.用flask写出的第一个页面 3.Flask的Response ...

  6. Java 基础篇之IO

    IO Java IO 流使用了一种装饰器设计模式,它将 IO 流分成底层节点流和上层处理流,其中节点流用于和物理节点直接关联,程序可以把不同物理节点流包装成统一的处理流,从而允许程序使用统一的输入.输 ...

  7. 【机器学习】【计算机视觉】非常全面的图像数据集《Actions》

    目录(?)[+]   1.搜狗实验室数据集: http://www.sogou.com/labs/dl/p.html 互联网图片库来自sogou图片搜索所索引的部分数据.其中收集了包括人物.动物.建筑 ...

  8. 《ThinkPHP 5.0快速入门》 数据库、查询语言

    1.数据库配置 return [ 'type' => 'mysql',// 数据库类型 'hostname' => '127.0.0.1',// 服务器地址 'database' => ...

  9. D3 GEO应用专题(一):绘制旋转的3D地球

    https://gallery.echartsjs.com/explore.html#sort=rank~timeframe=all~author=all 雷达图 https://blog.csdn. ...

  10. 结束占用端口号进程(pid)