Flink Kafka获取数据写入到MongoDB中 样例

简述

Apache Flink 是一个流处理和批处理的开源框架,它允许从各种数据源(如 Kafka)读取数据,处理数据,然后将数据写入到不同的目标系统(如 MongoDB)。以下是一个简化的流程,描述如何使用 Flink 从 Kafka 读取数据并保存到 MongoDB:

1、环境准备

  • 安装并配置 Apache Flink。
  • 安装并配置 Apache Kafka。
  • 安装并配置 MongoDB。
  • 创建一个 Kafka 主题,并发送一些测试数据。
  • 确保 Flink 可以连接到 Kafka 和 MongoDB。

部署参考:

1、flink:Flink 部署执行模式

2、kafka:Flink mongo & Kafka

3、mongoDb:mongo副本集本地部署

2. 添加依赖

在Flink 项目中,需要添加 Kafka 和 MongoDB 的连接器依赖。对于 Maven 项目,可以在 pom.xml 文件中添加相应的依赖。

对于 Kafka,需要添加 Flink Kafka Connector 的依赖。

对于 MongoDB,需要添加 Flink MongoDB Sink 的依赖。

bash 复制代码
* 创建一个 Flink 作业,使用 Flink 的 `FlinkKafkaConsumer` 从 Kafka 主题中读取数据。  
* 对读取的数据进行必要的转换或处理。  
* 使用 MongoDB 的 Java 驱动程序或第三方库将处理后的数据写入 MongoDB。

使用 Flink 的命令行工具或 IDE 运行 Flink 作业。确保 Kafka 和 MongoDB 正在运行,并且 Flink 可以访问它们。

参考:Flink 命令行提交、展示和取消作业

5. 监控和调试

使用 Flink 的 Web UI 或其他监控工具来监控作业。如果出现问题,检查日志并进行调试。

6. 优化和扩展

根据需求和数据量,优化 Flink 作业的性能和可扩展性。这可能包括调整并行度、增加资源、优化数据处理逻辑等。

代码

java 复制代码
package com.wfg.flink.connector.kafka;

import com.mongodb.client.model.InsertOneModel;
import org.apache.flink.api.common.eventtime.WatermarkStrategy;
import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.connector.kafka.source.KafkaSource;
import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer;
import org.apache.flink.connector.mongodb.sink.MongoSink;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.bson.BsonDocument;

import static com.wfg.flink.connector.constants.Constants.KAFKA_BROKERS;
import static com.wfg.flink.connector.constants.Constants.TEST_TOPIC_PV;

/**
 * @author wfg
 */
public class KafkaToWriteMongo {
    public static void main(String[] args) throws Exception {
        // 1. 设置 Flink 执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        KafkaSource<String> source = KafkaSource.<String>builder()
                .setBootstrapServers(KAFKA_BROKERS)
                .setTopics(TEST_TOPIC_PV)
                .setGroupId("my-test-topic-pv")
                .setStartingOffsets(OffsetsInitializer.latest())
                .setValueOnlyDeserializer(new SimpleStringSchema())
                .build();

        DataStreamSource<String> rs = env.fromSource(source, WatermarkStrategy.noWatermarks(), "Kafka Source");
        // 创建RollingFileSink
        MongoSink<String> sink = MongoSink.<String>builder()
                .setUri("mongodb://root:123456@127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/admin?replicaSet=rs0&authSource=admin")
                .setDatabase("sjzz")
                .setCollection("TestMongoPv")
                .setMaxRetries(3)
//                .setDeliveryGuarantee(DeliveryGuarantee.AT_LEAST_ONCE)
                .setSerializationSchema(
                        (input, context) -> {
                            System.out.println(input);
                            return new InsertOneModel<>(BsonDocument.parse(input));
                        })
                .build();
        rs.sinkTo(sink);
        // 6. 执行 Flink 作业
        env.execute("Kafka Flink Job");
    }
}
相关推荐
磐链科技11 小时前
交场景下的钱包开发痛点:并发交易与消息推送的分布式一致性技术方案
分布式
程序员与背包客_CoderZ17 小时前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
汽车仪器仪表相关领域19 小时前
ZDT‑I伺服电机测试系统:四象限动态加载
大数据·数据库·分布式·功能测试·汽车·压力测试·可用性测试
骇客野人20 小时前
Java分布式任务调度方案(完整落地指南)
java·开发语言·分布式
像风一样自由202020 小时前
11.PostgreSQ、-MySQL与MongoDB-AI应用如何选择数据库
数据库·人工智能·mysql·mongodb·大模型·rag·智能体
每天一道题21 小时前
从 async/await 到幂等恢复:把 Python 并发和 Agent Runtime 一次讲清楚
分布式·python
Zach_菠萝侠1 天前
【deepseek harness研究】进化方向7:分布式与远程执行 思考、设计与实现
分布式·深度学习·deepseek
骇客野人1 天前
SpringBoot 接入 Kafka 完整实操步骤
spring boot·kafka·linq
Sayai1 天前
Kafka 集群开启 SASL 认证实战(二):外置 ZooKeeper 之 kafka 与 zk 间认证
分布式·zookeeper·kafka
Sayai1 天前
Kafka 集群开启 SASL 认证实战(一):内置 ZooKeeper 场景,JAAS 配置全流程
分布式·zookeeper·kafka