flink+kafka实现流数据处理学习

在应用系统的建设过程中,通常都会遇到需要实时处理数据的场景,处理实时数据的框架有很多,本文将以一个示例来介绍flink+kafka在流数据处理中的应用。

1、概念介绍

  • flink:是一个分布式、高可用、高可靠的大数据处理引擎,提供了一种高效、可靠、可扩展的方式来处理和分析实时数据。

  • kafka:是用于构建实时数据管道和流应用程序并具有横向扩展,容错,wicked fast(变态快)等优点的一种消息中间件。

  • flink-connector-kafka:是flink内置的kafka连接器,它允许Flink应用轻松地从Kafka中读取数据流(Source)或将数据流写入到Kafka(Sink)。

2、实现目标

本文主要从下面3个步骤完成流数据的处理:

  • flink作为kafka消费者,从kafka中消费数据并将消费到的数据转换为flink数据流;

  • flink对获取到的数据流进行计算、聚合等操作;

  • flink对处理之后的数据再次写入到kafka中,实现数据的流动。

3、实现步骤

  • 新建maven工程,将依赖添加到环境中

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <flink.version>1.20.0</flink.version>
    <flink-kafka.version>3.3.0-1.20</flink-kafka.version>
  </properties>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>21</java.version>
    <flink.version>1.20.0</flink.version>
    <flink-kafka.version>3.3.0-1.20</flink-kafka.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-streaming-java</artifactId>
      <version>${flink.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-clients</artifactId>
      <version>${flink.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-connector-kafka</artifactId>
      <version>${flink-kafka.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-connector-base</artifactId>
      <version>${flink.version}</version>
    </dependency>
    <!--    json处理    -->
    <dependency>
      <groupId>com.alibaba.fastjson2</groupId>
      <artifactId>fastjson2</artifactId>
      <version>2.0.53</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
   
FlinkKafka是两种常用于大数据处理的技术,它们可以结合使用来处理实时数据。以下是对FlinkKafka的介绍以及它们如何结合使用的说明: ### Flink Apache Flink是一个开源的分布式处理框架,用于对无界和有界数据进行有状态计算。Flink提供了高吞吐量和低延迟的处理能力,并且支持复杂的处理操作,如窗口计算、事件时间和状态管理等。 ### Kafka Apache Kafka是一个分布式处理平台,用于构建实时数据管道和应用。Kafka具有高吞吐量、可持久化和分布式等特点,常用于消息传递、日志聚合、实时数据处理等场景。 ### FlinkKafka的结合 FlinkKafka可以结合使用,以构建强大的实时数据处理系统。以下是一些常见的应用场景: 1. **实时数据处理**:Kafka作为数据源,实时收集和处理来自各种数据源的数据。Flink则负责对这些数据进行处理和分析。例如,实时监控、实时报表、实时推荐系统等。 2. **数据管道**:Kafka作为数据管道,连接不同的数据源和目标系统。Flink则作为数据处理引擎,对数据进行清洗、转换和聚合。例如,ETL(提取、转换、加载)程。 3. **事件驱动应用**:Kafka作为事件总线,接收和分发各种事件。Flink则作为事件处理器,对事件进行实时处理和响应。例如,实时报警系统、实时决策系统等。 ### 示例 以下是一个简单的示例,展示了如何使用FlinkKafka中读取数据进行处理: ```java import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer; import java.util.Properties; public class FlinkKafkaExample { public static void main(String[] args) throws Exception { // 创建Flink执行环境 final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 配置Kafka消费者属性 Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("group.id", "flink-group"); // 创建Kafka消费者 FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>("topic-name", new SimpleStringSchema(), properties); // 添加Kafka数据源 DataStream<String> stream = env.addSource(consumer); // 处理数据 stream.print(); // 执行任务 env.execute("Flink Kafka Example"); } } ``` 在这个示例中,FlinkKafka的主题中读取数据,并将其打印到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值