基于scala使用flink将kafka数据写入mysql示例

文章描述了如何使用ApacheFlink处理Kafka的ChangeRecord主题数据,每三分钟统计设备状态为预警且未处理的数据,并将结果追加写入MySQL表shtd_industry.threemin_warning_state_agg,同时备份到HBase。文中包含了Flink流处理设置、Kafka源创建、过滤、聚合操作以及数据库连接和数据写入的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Flink消费Kafka中ChangeRecord主题的数据,统计每三分钟各设备状态为“预警”且未处理的数据总数。将结果存入MySQL的shtd_industry.threemin_warning_state_agg表(追加写入),表结构如下,同时备份到Hbase一份,表结构同MySQL表的。请在将任务启动命令截图,启动且数据进入后按照设备id倒序排序查询threemin_warning_state_agg表进行截图,第一次截图后等待三分钟再次查询并截图,将结果截图粘贴至对应报告中。


连接kafka

val kafkaSource=KafkaSource.builder()
      .setTopics("ChangeRecord")
      .setBootstrapServers("bigdata1:9092")
      .setValueOnlyDeserializer(new SimpleStringSchema())
      .setStartingOffsets(OffsetsInitializer.earliest())
      .build()

设置flink流处理环境

val env:StreamExecutionEnvironment=StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)

从kafka源创建数据流

val dataStream = env.fromSource(kafkaSource, WatermarkStrategy.noWatermarks(), "03")
  • formSource : 从外部数据源创建一个数据流
  • kafkaSource : kafka地址及配置
  • WatermarkStrategy.no
### 使用 Flink SQL 从 Kafka 消费数据写入 StarRocks 的实现方法 #### 解决方案概述 为了实现从 Kafka 消费数据并通过 Flink SQL 将其写入 StarRocks,需要配置 Kafka 和 StarRocks 的连接器,并编写相应的 Flink SQL 查询语句。以下是详细的实现过程。 --- #### 1. 配置环境依赖 在 Maven 工程中引入必要的依赖项,包括 Kafka 连接器和 StarRocks 连接器: ```xml <dependencies> <!-- Flink SQL Core --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-sql-client_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> <!-- Kafka Connector --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-kafka_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> <!-- StarRocks JDBC Driver --> <dependency> <groupId>com.starrocks</groupId> <artifactId>starrocks-jdbc</artifactId> <version>${starrocks.jdbc.version}</version> </dependency> <!-- StarRocks Flink Connector (if available) --> <dependency> <groupId>com.starrocks.connector</groupId> <artifactId>flink-starrocks-connector</artifactId> <version>${starrocks.connector.version}</version> </dependency> </dependencies> ``` --- #### 2. 创建 Kafka 表 定义一个用于消费 Kafka 数据的表结构。假设 Kafka 主题名为 `kafka_topic`,消息格式为 JSON。 ```sql CREATE TABLE kafka_source ( id BIGINT, name STRING, age INT, event_time TIMESTAMP(3), WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND ) WITH ( 'connector' = 'kafka', 'topic' = 'kafka_topic', 'properties.bootstrap.servers' = 'localhost:9092', 'format' = 'json' ); ``` 此部分说明了如何创建一个基于 Kafka 的源表[^1]。 --- #### 3. 创建 StarRocks 表 定义目标表以存储来自 Kafka数据。假设 StarRocks 表名是 `starrocks_table`。 ```sql CREATE TABLE starrocks_sink ( id BIGINT, name STRING, age INT, PRIMARY KEY(id) NOT ENFORCED ) WITH ( 'connector' = 'starrocks', 'jdbc-url' = 'jdbc:mysql://starrocks_host:9030?load balancing=hash&table_location=prefixed', 'username' = 'root', 'password' = '', 'database-name' = 'test_db', 'table-name' = 'starrocks_table', 'sink.properties.format' = 'parquet', -- 可选参数 'sink.buffer-flush.max-bytes' = '10485760', -- 缓冲区大小,默认1MB 'sink.buffer-flush.interval' = '1s' -- 刷新间隔时间 ); ``` 此处展示了如何设置 StarRocks 作为目标表[^3]。 --- #### 4. 插入数据到 StarRocks 通过 INSERT INTO 语句将 Kafka 中的数据写入 StarRocks。 ```sql INSERT INTO starrocks_sink SELECT id, name, age FROM kafka_source; ``` 该操作实现了从 Kafka 源表向 StarRocks 目标表的数据传输[^4]。 --- #### 示例代码总结 完整的流程如下所示: ```sql -- Step 1: 定义 Kafka Source Table CREATE TABLE kafka_source ( id BIGINT, name STRING, age INT, event_time TIMESTAMP(3), WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND ) WITH ( 'connector' = 'kafka', 'topic' = 'kafka_topic', 'properties.bootstrap.servers' = 'localhost:9092', 'format' = 'json' ); -- Step 2: 定义 StarRocks Sink Table CREATE TABLE starrocks_sink ( id BIGINT, name STRING, age INT, PRIMARY KEY(id) NOT ENFORCED ) WITH ( 'connector' = 'starrocks', 'jdbc-url' = 'jdbc:mysql://starrocks_host:9030?load balancing=hash&table_location=prefixed', 'username' = 'root', 'password' = '', 'database-name' = 'test_db', 'table-name' = 'starrocks_table', 'sink.properties.format' = 'parquet', 'sink.buffer-flush.max-bytes' = '10485760', 'sink.buffer-flush.interval' = '1s' ); -- Step 3: 执行插入操作 INSERT INTO starrocks_sink SELECT id, name, age FROM kafka_source; ``` --- ### 注意事项 - 确保使用Flink 版本与 CDC 版本兼容。 - 如果遇到版本不匹配问题,请自行编译适合的 CDC 版本或调整 Flink 版本。 - 星环科技官方文档提供了更多关于 StarRocks Flink Connector 的详细信息。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值