flink输出到数据库

通过flink将kafka中的数据存储到clickhouse中.

写入数据的 Clickhouse 的测试步骤如下。

(1)添加依赖

flink基本依赖记得自行添加
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-jdbc_2.11</artifactId>
            <version>1.12.7</version>
        </dependency>

        <dependency>
            <groupId>ru.yandex.clickhouse</groupId>
            <artifactId>clickhouse-jdbc</artifactId>
            <version>0.3.2</version>
        </dependency>

(2)启动 clickhouse,在 test1 库下建表 source_log

CREATE TABLE test1.source_log
(

    `id` String,

    `src_ip` String,

    `src_port` Int32,

    `dst_ip` String,

    `dst_port` Int32,

    `protocol` String,

    `type` String,

    `device_num` String,

    `create_date` DateTime
)
ENGINE = MergeTree
ORDER BY id

(3)编写输出到 Clickhouse的示例代码

import com.clickhouse.jdbc.ClickHouseDriver;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.flink.WuYuan;
import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.connector.jdbc.JdbcConnectionOptions;
import org.apache.flink.connector.jdbc.JdbcSink;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer;
import org.apache.flink.types.Row;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;

import java.util.Properties;
import java.util.UUID;

public class FlinkReadKafka {

    public static void main(String[] args) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();

        StreamExecutionEnvironment executionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment();

        //1. source 数据源
        //参数1: topic  参数2: 相当于之前的stringserilize  参数3: kafka的基本配置
        Properties properties = new Properties();
        properties.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "81.70.199.213:9092");
        properties.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
        properties.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());

        DataStreamSource<String> sourceStream = executionEnvironment.addSource(new FlinkKafkaConsumer<>("wangluo", new SimpleStringSchema(), properties));

        //简单的打印每条来自kafka的数据
        //sourceStream.print();

        //2. transform 数据处理  将json字符串转成java对象
        SingleOutputStreamOperator<Row> singleOutputStreamOperator = sourceStream.map(jsonStr -> {
            WuYuan wuYuan = objectMapper.readValue(jsonStr, WuYuan.class);

            Row row = new Row(6);
            row.setField(0, UUID.randomUUID().toString());
            row.setField(1, wuYuan.getSrcIp());
            row.setField(2, wuYuan.getSrcPort());
            row.setField(3, wuYuan.getDstIp());
            row.setField(4, wuYuan.getDstPort());
            row.setField(5, wuYuan.getProtocol());

            return row;
        });

        singleOutputStreamOperator.addSink(JdbcSink.sink(
                "insert into source_log values(?,?,?,?,?,?)",
                (preparedStatement, row) -> {
                    preparedStatement.setObject(1, row.getField(0));
                    preparedStatement.setObject(2, row.getField(1));
                    preparedStatement.setObject(3, row.getField(2));
                    preparedStatement.setObject(4, row.getField(3));
                    preparedStatement.setObject(5, row.getField(4));
                    preparedStatement.setObject(6, row.getField(5));
                },
                new JdbcConnectionOptions.JdbcConnectionOptionsBuilder()
                        .withDriverName(ClickHouseDriver.class.getName())
                        .withUrl("jdbc:clickhouse://81.70.199.213:8123/test1?socket_timeout=600000")
                        .withUsername("root")
                        .withPassword("hexin")
                        .build()
        ));


        //启动flink
        executionEnvironment.execute();
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
用户画像作为大数据的根基,它抽象出一个用户的信息全貌,为进一步精准、快速地分析用户行为习惯、消费习惯等重要信息,提供了足够的数据基础,奠定了大数据时代的基石。 用户画像,即用户信息标签化,就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后,抽象出一个用户的商业全貌作是企业应用大数据技术的基本方式。用户画像为企业提供了足够的信息基础,能够帮助企业快速找到精准用户群体以及用户需求等更为广泛的反馈信息。 用户画像系统能很好地帮助企业分析用户的行为与消费习惯,可以预测商品的发展的趋势,提高产品质量,同时提高用户满意度。构建一个用户画像,包括数据源端数据收集、数据预处理、行为建模、构建用户画像。有些标签是可以直接获取到的,有些标签需要通过数据挖掘分析到!本套课程会带着你一步一步的实现用户画像案例,掌握了本套课程内容,可以让你感受到Flink+ClickHouse技术架构的强大和大数据应用的广泛性。 在这个数据爆发的时代,像大型电商的数据量达到百亿级别,我们往往无法对海量的明细数据做进一步层次的预聚合,大量的业务数据都是好几亿数据关联,并且我们需要聚合结果能在秒级返回。 包括我们的画像数据,也是有这方便的需求,那怎么才能达到秒级返回呢?ClickHouse正好满足我们的需求,它是非常的强大的。 本课程采用Flink+ClickHouse技术架构实现我们的画像系统,通过学习完本课程可以节省你摸索的时间,节省企业成本,提高企业开发效率。希望本课程对一些企业开发人员和对新技术栈有兴趣的伙伴有所帮助,如对我录制的教程内容有建议请及时交流。项目中采用到的算法包含Logistic Regression、Kmeans、TF-IDF等,Flink暂时支持的算法比较少,对于以上算法,本课程将带大家用Flink实现,并且结合真实场景,学完即用。系统包含所有终端的数据(移动端、PC端、小程序端),支持亿级数据量的分析和查询,并且是实时和近实时的对用户进行画像计算。本课程包含的画像指标包含:概况趋势,基础属性,行为特征,兴趣爱好,风险特征,消费特征,营销敏感度,用户标签信息,用户群里,商品关键字等几大指标模块,每个指标都会带大家实现。课程所涵盖的知识点包括:开发工具为:IDEA FlinkClickhouseHadoopHbaseKafkaCanalbinlogSpringBootSpringCloudHDFSVue.jsNode.jsElemntUIEcharts等等 课程亮点: 1.企业级实战、真实工业界产品 2.ClickHouse高性能列式存储数据库 3.提供原始日志数据进行效果检测 4.Flink join企业级实战演练 5.第四代计算引擎Flink+ClickHouse技术架构6.微服务架构技术SpringBoot+SpringCloud技术架构7.算法处理包含Logistic Regression、Kmeans、TF-IDF等8.数据库实时同步落地方案实操9.统计终端的数据(移动端、PC端、小程序端) 10.支撑亿级海量数据的用户画像平台11.实时和近实时的对用户进行画像计算12.后端+大数据技术栈+前端可视化13.提供技术落地指导支持 14.课程凝聚讲师多年实战经验,经验直接复制15.掌握全部内容能独立进行大数据用户平台的设计和实操企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。 
Flink中将数据输出到Oracle数据库,需要进行以下几个步骤: 1. 首先,确保你已经获取了Oracle的ojdbc6.jar文件,并将其添加到项目的依赖中。你可以在pom.xml文件中添加以下代码来引用ojdbc6.jar: ```xml <!-- 添加oracle jdbc driver --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>12.1.0.2.0</version> </dependency> ``` 这样,Flink就能够使用Oracle的JdbcDriver了。\[1\] 2. 在代码中,使用Java的sql类库建立与Oracle数据库的连接。在连接之前,需要告诉Flink我们要使用的JdbcDriver是Oracle的Driver。你可以使用以下代码来加载Oracle的Driver: ```java Class.forName("oracle.jdbc.OracleDriver"); ``` 这样,Flink就能够正确地加载Oracle的Driver了。\[2\] 3. 最后,你可以使用Flink的自定义Sink将数据输出到Oracle数据库。具体的实现方式可以根据你的需求来定制,但是你需要确保在输出之前已经建立了与Oracle数据库的连接,并且将数据正确地写入到数据库中。 综上所述,你可以按照以上步骤来实现将数据从Flink输出到Oracle数据库。 #### 引用[.reference_title] - *1* *2* *3* [Flink流计算编程--Flink sink to Oracle](https://blog.csdn.net/lmalds/article/details/52400805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁星-赵老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值