Hello Flink(一)

Hello Flink(一)

其实这并不是我第一次接触Flink,但是之前都是浅浅的了解,这次准备好好认识一下这位公认的Spark的强大对手——Flink!

请添加图片描述

一、开发语言

作为一名大数据开发者,我首先关心的就是Flink需要用到哪些语言来进行开发,以及它的原生语言是什么。

Apache Flink 主要使用 Java 和 Scala 语言进行开发,但也支持 Python 和 SQL 等语言。其中,Java 和 Scala 是 Flink 最主要的开发语言,因为它们能够充分利用 Flink 的类型系统和面向对象特性,使得代码更加健壮和可维护。

在 Java 和 Scala 中,使用 Flink 提供的 API 可以编写丰富的批处理和流处理应用程序。此外,Flink 还提供了 DataStream API 和 DataSet API,可以分别用于流处理和批处理场景。这两个 API 都提供了丰富的操作符和函数,方便用户进行数据转换、聚合、过滤等操作。

在 Python 中,Flink 提供了 PyFlink API,可以用于编写流处理和批处理应用程序。使用 PyFlink,用户可以使用 Python 语言编写 Flink 应用程序,并利用 Python 生态系统中的第三方库进行数据处理和分析。

总的来说,Java 和 Scala 是 Flink 的主要开发语言,Python 也可以使用 PyFlink API 进行开发。在 Flink 社区中,Java 和 Scala 的使用比较广泛,但也有不少用户使用 PyFlink 进行开发。我目前最熟悉的就是Scala语言啦,可以基本无缝衔接,不错!

二、输入类型

既然是一款大数据分析框架,那很关键的事情之一就是输入源,如果输入源和业务侧不能对接,那也是一件挺尴尬的事情。目前我使用Spark时最常用的是FileStream,监控HDFS文件的变动,取新文件来分析。

Apache Flink 支持多种类型的输入流,包括批处理和流处理两种模式。下面列举了 Flink 常见的输入流类型:

  1. 文件输入流:Flink 可以读取 HDFS、本地文件系统和 S3 等存储系统中的文件作为输入流。使用 Flink 提供的 FileInputFormat 和 TextInputFormat 可以读取文本文件,使用 AvroInputFormat 可以读取 Avro 格式的文件,使用 SequenceFileInputFormat 可以读取 Hadoop Sequence File 格式的文件,还可以使用自定义的 Input Format 来读取其他格式的文件。

  2. 数据库输入流:Flink 支持从 JDBC 数据源中读取数据作为输入流。使用 Flink 的 JDBCInputFormat 可以连接到关系型数据库,并通过 SQL 语句查询数据。同时,Flink 还支持连接到 NoSQL 数据库,例如 Apache Cassandra 和 Apache HBase,并读取数据作为输入流。

  3. Socket 输入流:Flink 可以通过 Socket 接收数据作为输入流。使用 Flink 提供的 SocketTextStreamFunction 可以接收文本数据,使用 SocketStreamFunction 可以接收二进制数据。

  4. 消息队列输入流:Flink 支持从多种消息队列中读取数据作为输入流,包括 Apache Kafka、Apache Pulsar、RabbitMQ 等。使用 Flink 提供的 KafkaConsumer 和 PulsarSourceFunction 可以分别从 Kafka 和 Pulsar 中读取数据。

  5. 自定义输入流:Flink 还支持通过实现 SourceFunction 接口来创建自定义输入流。SourceFunction 是 Flink 中用于定义数据源的接口,可以用于实现各种输入流,例如从 Web API 中读取数据、从自定义协议中读取数据等。

总的来说,Flink 支持多种输入流,可以满足不同应用场景的需求。用户可以根据自己的数据来源,选择合适的输入流类型,并使用 Flink 提供的相应 API 进行开发。

三、最简单的样例

在我打开官网的Fraud Detection with the DataStream API页面之后,发现事情没那么简单,这里面的样例竟然都是使用Java 11。我平时用的Java 8,这里是稍稍有点怕,万一整出一堆新特性的使用,我还没了解到的那种,就得先学Java 11咯。

不过还好,仔细看了一下样例代码比较简单,我来浅浅解读一下。

package scala.flink

import org.apache.flink.api.scala.createTypeInformation
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.walkthrough.common.source.TransactionSource


class FraudDetectionJob {
  @throws[Exception]
  def main(args: Array[String]): Unit = {
    // 创建一个environment
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    // 流式读取一个路径下的文件
    val transactions = env.readFileStream[Transaction](path = "src/main/resources/", 
      maxParallelism = 1, 
      watchType = FileProcessingMode.PROCESS_CONTINUOUSLY, 
      interval = 1000, 
      pathFilter = new PathFilter {
        // 过滤掉不是csv文件的文件
      override def filter(path: Path): Boolean = {
        path.getName.endsWith(".csv")
      }
    })
    // 按照账户id分组
    val alerts = transactions.keyBy(transaction => transaction.getAccountId).process(new FraudDetector)
    // 打印结果
    alerts.print
  }
}

是不是发现和官网不一样,那就对了。因为这个代码是自己写的,也没测试,只是试试用Scala写一个简单的样例,有时间了再上机测试一下。使用Scala写代码的时候,maven引用和官网不太一样,可以参考下面的引用:

    <dependencies>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-scala_2.12</artifactId>
            <version>1.17.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-walkthrough-common</artifactId>
            <version>1.17.0</version>
        </dependency>
    </dependencies>

今天就到这结束吧,再仔细看看官网的代码去,说不定以后就要换回Java为主了。
小伙伴们喜欢使用哪种语言呢?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值