Kafka与Flink的整合 -- sink、source

1、首先导入依赖:
复制代码
        <dependency>

            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka</artifactId>
            <version>1.15.2</version>

        </dependency>
2、 source:Flink从Kafka中读取数据
java 复制代码
public class Demo01KafkaSource {
    public static void main(String[] args) throws Exception{
        //构建环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        //构建kafka source 环境

        KafkaSource<String> source = KafkaSource.<String>builder()
                //指定broker列表
                .setBootstrapServers("master:9092,node1:9092,node2:9092")
                //指定topic
                .setTopics("bigdata")
                //指定消费组
                .setGroupId("my-group")
                //指定数据的读取的位置,earliest指的是读取最早的数据,latest:指定的读取的是最新的数据
                .setStartingOffsets(OffsetsInitializer.earliest())
                //读取数据格式:
                .setValueOnlyDeserializer(new SimpleStringSchema())
                .build();
                //使用kafka数据源
        DataStreamSource<String> kafkaSourceDS = env.
                fromSource(source, WatermarkStrategy.noWatermarks(), "Kafka Source");

        kafkaSourceDS.print();
        //启动flink
        env.execute();

    }
}
启动生产kafka:
复制代码
kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic bigdata
3、sink:Flink向Kafka中写入数据
java 复制代码
public class Demo02KafkaSink {
    public static void main(String[] args) throws Exception{
        //构建flink的环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        //读取数据文件:
        DataStreamSource<String> studentDS = env.readTextFile("flink/data/students.txt");

        //创建kafka sink
        KafkaSink<String> sink = KafkaSink.<String>builder()
                //指定flink broker列表
                .setBootstrapServers("master:9092,node1:9092,node2:9092")
                //指定数据的格式:
                .setRecordSerializer(KafkaRecordSerializationSchema.builder()
                        //指定topic,如果topic不存在就会自动的创建一个分区是1个副本是1个的topic
                        .setTopic("student")
                        //指定数据的格式
                        .setValueSerializationSchema(new SimpleStringSchema())
                        .build()
                )
                //指定数据处理的语义:
                .setDeliverGuarantee(DeliveryGuarantee.AT_LEAST_ONCE)
                .build();
        //执行flink
        studentDS.sinkTo(sink);
        //构建flink环境
        env.execute();
    }
}
启动消费kafka:
java 复制代码
kafka-console-consumer.sh --bootstrap-server  master:9092,node1:9092,node2:9092 --from-beginning --topic student
相关推荐
渐暖°3 分钟前
JDBC直连ORACLE进行查询
数据库·oracle
萧曵 丶27 分钟前
Next-Key Lock、记录锁、间隙锁浅谈
数据库·sql·mysql·mvcc·可重复读·幻读
做cv的小昊1 小时前
【TJU】信息检索与分析课程笔记和练习(7)数据库检索—Ei
数据库·笔记·学习·全文检索
zgl_200537791 小时前
ZGLanguage 解析SQL数据血缘 之 标识提取SQL语句中的目标表
java·大数据·数据库·数据仓库·hadoop·sql·源代码管理
莳花微语1 小时前
记录一次OGG进程abended,报错OGG-01431、OGG-01003、OGG-01151、OGG-01296问题的处理
数据库·sql·mysql
尋有緣2 小时前
力扣1355-活动参与者
大数据·数据库·leetcode·oracle·数据库开发
萧曵 丶2 小时前
MySQL三大日志系统浅谈
数据库·sql·mysql
煎蛋学姐2 小时前
SSM校园兼职招聘系统x6u36(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·企业管理·ssm 框架·校园兼职招聘系统
ChineHe3 小时前
Redis基础篇004_Redis Pipeline流水线详解
数据库·redis·缓存
西柚补习生3 小时前
通用 PWM 原理基础教学
数据库·mongodb