回复: 关于窗口计算,数据不连续,导致窗口延迟触发的问题。

2021-11-03 文章 wang edmond
你好:

可以设置水位线的生成的空闲时间,超过空闲时间没有事件也会生成水位线。

可以参见官方文档中的 Dealing With Idle Sourcces部分

https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/datastream/event-time/generating_watermarks/


Generating Watermarks | Apache 
Flink
Generating Watermarks # In this section you will learn about the APIs that 
Flink provides for working with event time timestamps and watermarks. For an 
introduction to event time, processing time, and ingestion time, please refer 
to the introduction to event time. Introduction to Watermark Strategies # In 
order to work with event time, Flink needs to know the events timestamps, 
meaning each ...
nightlies.apache.org



发件人: Gen Luo 
发送时间: 2021年11月3日 15:14
收件人: user-zh@flink.apache.org 
主题: Re: 关于窗口计算,数据不连续,导致窗口延迟触发的问题。

WatermarkGenerator接口有onEvent和onPeriodicEmit, onPeriodicEmit
会周期性调用,可能可以在这里实现一个多长时间没有调onEvent就发一个计算出来的新的watermark的逻辑,新的watermark比当前的watermark对应的窗口时间都更晚应该就能触发所有窗口了

On Mon, Nov 1, 2021 at 5:20 PM yuankuo.xia 
wrote:

> hi
>
>
> 背景:我在使用eventTime窗口进行聚合计算,但是数据不连续,比如:A,B时间段之内都有数据流入,但A时间段和B时间段中间有30分钟无数据流入
>
>
> 问题:由于数据不连续,导致A时间段的最后一个窗口不会触发,一直等到新数据流入才能触发。
>
>
> 是否有方案解决以上问题,比如:一段时间无数据流入,则触发所有窗口。我看了trigger接口,但是没有想到好的实现方案。


Re: flinkSQL写hive表,timestamp-pattern设置,分区是yyyyMMdd而不是yyyy-MM-dd的情况怎么搞。

2021-11-03 文章 Jingsong Li
你可以自定义个partition.time-extractor.class来自己解析

Flink应该搞个对应的partition.time-extractor.kind来默认支持你的需求。
建了个JIRA: https://issues.apache.org/jira/browse/FLINK-24758

Best,
Jingsong

On Thu, Nov 4, 2021 at 11:47 AM yidan zhao  wrote:
>
> 如题,我当前是select date_format(xxx, 'MMdd') as dt...
>
> partition.time-extractor.timestamp-pattern是$dt $hour:00:00这样。
>
> 但是这样会导致报错,貌似这个地方必须是 -MM-dd hh:mm:ss这种吗。



-- 
Best, Jingsong Lee


flinkSQL写hive表,timestamp-pattern设置,分区是yyyyMMdd而不是yyyy-MM-dd的情况怎么搞。

2021-11-03 文章 yidan zhao
如题,我当前是select date_format(xxx, 'MMdd') as dt...

partition.time-extractor.timestamp-pattern是$dt $hour:00:00这样。

但是这样会导致报错,貌似这个地方必须是 -MM-dd hh:mm:ss这种吗。


Re: 退订

2021-11-03 文章 Leonard Xu
如果需要取消订阅 user-zh@flink.apache.org 邮件组,请发送任意内容的邮件到 
user-zh-unsubscr...@flink.apache.org

> 在 2021年11月2日,14:15,李芳奎  写道:
> 
> 退订
> 
> felix 
> 
> felix_...@163.com



Re: 关于窗口计算,数据不连续,导致窗口延迟触发的问题。

2021-11-03 文章 Gen Luo
WatermarkGenerator接口有onEvent和onPeriodicEmit, onPeriodicEmit
会周期性调用,可能可以在这里实现一个多长时间没有调onEvent就发一个计算出来的新的watermark的逻辑,新的watermark比当前的watermark对应的窗口时间都更晚应该就能触发所有窗口了

On Mon, Nov 1, 2021 at 5:20 PM yuankuo.xia 
wrote:

> hi
>
>
> 背景:我在使用eventTime窗口进行聚合计算,但是数据不连续,比如:A,B时间段之内都有数据流入,但A时间段和B时间段中间有30分钟无数据流入
>
>
> 问题:由于数据不连续,导致A时间段的最后一个窗口不会触发,一直等到新数据流入才能触发。
>
>
> 是否有方案解决以上问题,比如:一段时间无数据流入,则触发所有窗口。我看了trigger接口,但是没有想到好的实现方案。


回复:关于窗口计算,数据不连续,导致窗口延迟触发的问题。

2021-11-03 文章 罗根(夕肆)
WatermarkGenerator接口有onEvent和onPeriodicEmit, 
onPeriodicEmit会周期性调用,可能可以在这里实现一个多长时间没有调onEvent就发一个计算出来的新的watermark的逻辑,新的watermark比当前的watermark对应的窗口时间都更晚应该就能触发所有窗口了


--
发件人:yuankuo.xia 
发送时间:2021年11月1日(星期一) 17:20
收件人:user-zh 
主 题:关于窗口计算,数据不连续,导致窗口延迟触发的问题。

hi


背景:我在使用eventTime窗口进行聚合计算,但是数据不连续,比如:A,B时间段之内都有数据流入,但A时间段和B时间段中间有30分钟无数据流入


问题:由于数据不连续,导致A时间段的最后一个窗口不会触发,一直等到新数据流入才能触发。


是否有方案解决以上问题,比如:一段时间无数据流入,则触发所有窗口。我看了trigger接口,但是没有想到好的实现方案。

Re: FlinkSQL 使用 streamingSink 写入 hive orc数据,如何控制文件数量。

2021-11-03 文章 yidan zhao
新问题忽略,估计是因为数据小,我换了个数据量大的,看到inprogress的情况了,是基于 . 开头控制可见性的。

yidan zhao  于2021年11月3日周三 下午1:14写道:

> 还有个问题,我看FlinkSQL写的文件的命名不像文档中说的如下格式:
>
> └── 2019-08-25--12
> ├── prefix-0-0.ext
> ├── prefix-0-1.ext.inprogress.bd053eb0-5ecf-4c85-8433-9eff486ac334
> ├── prefix-1-0.ext
> └── prefix-1-1.ext.inprogress.bc279efe-b16f-47d8-b828-00ef6e2fbd11
>
> 实际我看到的是,part-8201db8e-36d4-49d2-986d-611f6766b22f-0-351,不存在inprogress的状态,貌似是检查点的时候才一次性写?
>
>
> Caizhi Weng  于2021年11月3日周三 上午10:20写道:
>
>> Hi!
>>
>> hive sink 有文件合并功能可以在同一个 checkpoint 内把同一个 partition 的数据整理到同一个文件里。详见 [1]
>>
>> [1]
>>
>> https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/table/filesystem/#file-compaction
>>
>> yidan zhao  于2021年11月3日周三 上午10:03写道:
>>
>> > 需求
>> > 假设,我的hive表为tmp表,若干字段,如何以dt、hour、sid为分区,其中sid为渠道的含义。
>> >
>> >
>> 我当前基于FlinkSQL从kafka表中读取数据,转写到hive表tmp中,采用流式写入,提交策略metastore、success-file,触发假设用process-time,delay为1h。
>> > 检查点每1min检查一次,连续2次检查点间隔10min,本质就是10min做一次检查点。
>> >
>> > 当前情况
>> > 由于数据量较大,kafka分区数量为60,因此我的任务并发可以选择60以内,假设并发也选了60。
>> > 那么对于每个时间点,dt肯定只有1个,hour也基本只有1个,sid的话假设有10个。
>> > 文件数情况为:
>> > 每10分钟,10(sid)*60(parallelism)= 600个。
>> > 每小时有6个10分钟(即6次检查点),那么就是6000个文件。
>> > 如上,每小时差不多6000个文件生成,只会多不会少,因为考虑到roll policy等。
>> >
>> >
>> >
>> 目前我需要的是,由于不同sid的数据量不一样,我想能否对于小数据量的sid,只被1个subtask消费,这样对于这个sid对应的分区下,每10分钟的文件数量就是1个,而不是60个。
>> > 对于数据量大的sid,则多个并行subtask消费。
>> > 大概想法类似于datastream api中先keyBy
>> >
>> >
>> sid(当然这里可能有数据倾斜,我可以自己去想法解决,比如将大流量sid分散为sid+randomInt),然后基于streamingSink来消费并写入hive。
>> >
>> > 请问如上想法datastream、以及 flinkSQL 是否都能实现呢?
>> >
>> > 目前我看insert into tmp select ... from
>> > kafka_tmp;这样的话,默认生成2个task,一个kafkaSouce+streamSink(chain在一起)+ partition
>> > commiter,这是不满足需要的肯定。
>> >
>>
>