Flink 流处理之source简介

1 从集合读取数据

// 定义样例类:水位传感器:用于接收空高数据
// id:传感器编号
// ts:时间戳
// vc:空高
case class WaterSensor(id:String, ts:Long, vc:Double)

object Source_Collection {
    def main(args: Array[String]): Unit = {
        
        val env: StreamExecutionEnvironment =
 StreamExecutionEnvironment.getExecutionEnvironment
    
        val sensorDS: DataStream[WaterSensor] = env.fromCollection(
            List(
                WaterSensor("ws_001", 1577844001, 45.0),
                WaterSensor("ws_002", 1577844015, 43.0),
                WaterSensor("ws_003", 1577844020, 42.0)
            )
        )
    
        sensorDS.print()
        
        env.execute("sensor")
    }
}

2 从文件读取数据

val env: StreamExecutionEnvironment =
StreamExecutionEnvironment.getExecutionEnvironment

val fileDS: DataStream[String] = env.readTextFile("input/data.txt")

fileDS.print()

env.execute("sensor")

3 以kafka消息队列的数据作为来源
引入kafka连接器的依赖:

<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-connector-kafka-0.11 -->
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-connector-kafka-0.11_2.11</artifactId>
    <version>1.7.2</version>
</dependency>

代码实现:

<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-connector-kafka-0.11 -->
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-connector-kafka-0.11_2.11</artifactId>
    <version>1.7.2</version>
</dependency>
代码实现:
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

val properties = new Properties()
properties.setProperty("bootstrap.servers", "hadoop1:9092")
properties.setProperty("group.id", "consumer-group")
properties.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
properties.setProperty("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
properties.setProperty("auto.offset.reset", "latest")

val kafkaDS: DataStream[String] = env.addSource(
    new FlinkKafkaConsumer011[String]("sensor", new SimpleStringSchema(), properties)
)

kafkaDS.print()

env.execute("sensor")

4 自定义Source
除了以上的source数据来源,我们还可以自定义source。调用如下:

val env: StreamExecutionEnvironment =
StreamExecutionEnvironment.getExecutionEnvironment

val mySensorDS: DataStream[WaterSensor] = env.addSource(
    new MySensorSource()
)

mySensorDS.print()

env.execute("sensor")

MySensorSource具体的代码实现如下:

class MySensorSource extends SourceFunction[WaterSensor] {
    var flg = true
    override def run(ctx: SourceFunction.SourceContext[WaterSensor]): Unit = {
        while ( flg ) {
            // 采集数据
            ctx.collect(
                WaterSensor(
                    "sensor_" +new Random().nextInt(3),
                    1577844001,
                    new Random().nextInt(5)+40
                )
            )
            Thread.sleep(100)
        }
    }

    override def cancel(): Unit = {
        flg = false;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flink是一个处理框架,它的基本数据模型是数据和事件序列。数据可以是无边界的无限,也可以是有边界的有限,同时兼顾了批处理的能力。与之相反,Spark Streaming是将转化为小批次来处理,这种方案在需要低延迟时会导致额外开销占比增加,难以实现秒级或亚秒级的延迟。而Flink将批处理视为一种有限的,这种做法在共享大部分代码的同时,还能保留批处理的一系列优化。因此,Flink处理方面具有更好的性能和灵活性。关于Flink的PHP处理,我无法提供具体信息,因为Flink主要用于Java和Scala编程语言。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [批一体神器 FlinkFlink State 架构原理解析](https://blog.csdn.net/tzs_1041218129/article/details/114609765)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [基于Flink建设批一体实时数仓](https://blog.csdn.net/w397090770/article/details/121646407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值