flink介绍

Flink是一个框架和分布式处理引擎,用于对无限制和有限制的数据留进行有状态的计算。Flink被设计为可在所有常见的集群环境中运行,以内存速度和任何规模执行计算。

处理无界和有界数据
任何类型的数据都是作为事件流产生的。信用卡交易,传感器测量,机器日志或网站移动应用程序上的用户交互,所有这些数据均作为流生成。

Flink 功能强大,支持开发和运行多种不同种类的应用程序。它的主要特性包括:批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。在启用高可用选项的情况下,它不存在单点失效问题。事实证明,Flink 已经可以扩展到数千核心,其状态可以达到 TB 级别,且仍能保持高吞吐、低延迟的特性。世界各地有很多要求严苛的流处理应用都运行在 Flink 之上。
核心点:
1、高吞吐,低延迟
2、结果的准确性
3、精确一次的状态一致性保证
4、高可用,支持动态扩展

依赖

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>1.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_2.11</artifactId>
            <version>1.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_2.11</artifactId>
            <version>1.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka_2.11</artifactId>
            <version>1.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>

Flink消费Kafka数据

package com.kafka;

import lombok.extern.slf4j.Slf4j;
import org.apache.flink.api.common.functions.MapFunction;
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.kafka.FlinkKafkaConsumer;
import org.apache.kafka.clients.CommonClientConfigs;
import org.apache.kafka.common.config.SaslConfigs;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

@Slf4j
public class Flink {
    
    public static void main(String[] args) {
        try {
            //TODO 1、初始化flink流处理的运行环境
            StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
            //TODO 2、创建数据源
            Properties properties = new Properties();
            //封装kafka的连接地址
            properties.setProperty("bootstrap.servers", "127.0.0.1:9092");
            //指定消费者id
            properties.setProperty("group.id", "consumer-group");
            //设置动态监测分区或者主题的变化
            properties.setProperty("flink.partition-discovery.interval-millis", "30000");
            //配置security.protocol
            properties.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_PLAINTEXT");
            //配置sasl.mechanism
//            properties.put(SaslConfigs.SASL_MECHANISM, "PLAIN");
            properties.put(SaslConfigs.SASL_MECHANISM, "SCRAM-SHA-256");
            //配置sasl.jaas.config
            properties.put(SaslConfigs.SASL_JAAS_CONFIG, "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"账号\" password=\"密码\";");
//            消费主题
//            消费多个主题
            List<String> topicList = new ArrayList<>();
            topicList.add("OGG_TEST.T_OGGO_FB");
//            topicList.add("OGG_TEST.T_OGG_FB");
//            topicList.add("OGG_TEST.T_OGGO_EB");
//            topicList.add("OGG_TEST.T_OGG_EB");
//            topicList.add("OGG_TEST.T_OGGO_DB");
//            topicList.add("OGG_TEST.T_OGG_DB");
            FlinkKafkaConsumer<String> kafkaConsumer = new FlinkKafkaConsumer<>(topicList, new SimpleStringSchema(), properties);


//            KafkaConsumer.setStartFromEarliest():从topic的最早offset位置开始处理数据,如果kafka中保存有消费者组的消费位置将被忽略。
//            KafkaConsumer.setStartFromLatest():从topic的最新offset位置开始处理数据,如果kafka中保存有消费者组的消费位置将被忽略。
//            KafkaConsumer.setStartFromTimestamp(…):从指定的时间戳(毫秒)开始消费数据,Kafka中每个分区中数据大于等于设置的时间戳的数据位置将被当做开始消费的位置。如果kafka中保存有消费者组的消费位置将被忽略。
//            KafkaConsumer.setStartFromGroupOffsets():默认的设置。根据代码中设置的group.id设置的消费者组,去kafka中或者zookeeper中找到对应的消费者offset位置消费数据。如果没有找到对应的消费者组的位置,那么将按照auto.offset.reset设置的策略读取offset。

            //读取kafka数据的时候需要指定消费策略,如果不指定会使用auto.offset.reset设置
//            kafkaConsumer.setStartFromEarliest();
            kafkaConsumer.setStartFromLatest();

            DataStreamSource<String> dataStreamSource = env.addSource(kafkaConsumer);

            dataStreamSource.map(new MapFunction<String, String>() {
                @Override
                public String map(String value) throws Exception {
                    log.info("kafka数据:" + value);
                    return "Flink消费kafka数据" + value;
                }
            }).print();

            //TODO 5、调用execute方法触发程序执行
            env.execute();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}

打包放flink中执行

1、配置打包
image.png
2、配置打包
image.png
3、配置打包
image.png
4、配置打包
image.png
5、打包
image.png
6、打包
image.png
7、上传
image.png
8、配置启动
image.png


LLL_
15 声望3 粉丝