flink入门之StreaimingFileSink的使用

本文介绍如何使用Flink StreamingFileSink将Kafka消息保存至HDFS,并探讨不同存储格式(如Parquet)及压缩方式(如Snappy)的应用。同时,深入分析自定义分桶与滚动策略以优化文件管理和提高数据处理效率。

需求:用flink实时消费kafka信息,将信息存储到hdfs上。
方案:用flink提供的StreaimingFileSink方法。

forRowFormat方法

这个方法比较简单,就是把读到的信息按照行存储的格式写入hdfs上,我们这里直接看下官方提供的代码:(分桶策略后面再说)

import org.apache.flink.api.common.serialization.SimpleStringEncoder
import org.apache.flink.core.fs.Path
import org.apache.flink.streaming.api.functions.sink.filesystem.StreamingFileSink
import org.apache.flink.streaming.api.functions.sink.filesystem.rollingpolicies.DefaultRollingPolicy

val input: DataStream[String] = ...

val sink: StreamingFileSink[String] = StreamingFileSink
    .forRowFormat(new Path(outputPath), new SimpleStringEncoder[String]("UTF-8"))
    .withRollingPolicy(
    	//设置滚动策略
        DefaultRollingPolicy.builder()
       		 //15min 滚动,生成一个新文件
            .withRolloverInterval(TimeUnit.MINUTES.toMillis(15))
            //5min未接收到数据,滚动,生成一个新文件
            .withInactivityInterval(TimeUnit.MINUTES.toMillis(5))
            //文件大小达到1G,滚动,生成一个新文件
            .withMaxPartSize(1024 * 1024 * 1024)
            .build())
     //设置分桶策略
    .withBucketAssigner(dayAssigner)
    .build()

input.addSink(sink)

我们基本看代码就能知道这个sink的使用方法了。

forBulkFormat方法

但是除了上述的按照行存储的方式,我们往往需要指定其他的存储格式,例如:parquet,Avro,ORC等等…而且,我们还需要压缩写入的文件,针对这种情况,我们就需要换另一种方法,采用另一种编码器了。

Parquet格式

这里用parquet举例,其他情况类似。
首先我们要额外引入依赖:

> <dependency>   
> <groupId>org.apache.flink</groupId>  
> <artifactId>flink-parquet_2.11</artifactId>  
> <version>1.11.2</version> 
> </dependency>

然后代码:

import org.apache.flink.streaming.api.functions.sink.filesystem.StreamingFileSink
import org.apache.flink.formats.parquet.avro.ParquetAvroWriters

val input: DataStream[DemoBean] = ...

val sink: StreamingFileSink[DemoBean] = StreamingFileSink
    .forBulkFormat(outp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值