Flink
青云游子
大数据开发工程师
展开
-
flink自动发现kafka新增分区
如果flink程序在运行中,kafka新增了分区,flink程序是消费不了的,需要重启flink程序,然后重置kafka的offset。原创 2024-01-10 19:00:05 · 529 阅读 · 0 评论 -
FlinkSQL设置sink的并行度
【代码】FlinkSQL设置sink的并行度。原创 2024-01-03 18:35:32 · 721 阅读 · 0 评论 -
flink1.12.4消费kafka 报错 The coordinator is not available
但是任务还在正常跑.原创 2023-12-08 09:43:01 · 774 阅读 · 0 评论 -
flink获取kafka的key value timestamp header
参考:原创 2023-12-03 13:57:57 · 227 阅读 · 0 评论 -
flink报错:akka.pattern.AskTimeoutException: is that the recipient actor didn‘t send a reply
在flink-conf.yaml中添加或修改:akka.ask.timeout: 100s web.timeout: 100000。如果负载或网络问题无法彻底缓解,需考虑调大 akka.ask.timeout 参数的值(默认只有 10 秒);Akka 超时导致,一般有两种原因:一是集群负载比较大或者网络比较拥塞,二是业务逻辑同步调用耗时的外部服务。另外,调用外部服务时尽量异步操作(Async I/O)原创 2023-11-23 14:51:22 · 512 阅读 · 0 评论 -
使用FlinkCatalog将kafka的数据写入hive
【代码】使用FlinkCatalog将kafka的数据写入hive。原创 2023-10-16 16:30:56 · 976 阅读 · 1 评论 -
Flink面试常见问题(实战)
参考:Flink面试常见问题(实战) - 知乎原创 2023-08-16 20:41:17 · 88 阅读 · 0 评论 -
实时指标-1日留存率
2个DWD层 登录→kafka 注册→kafka 1个DWS 弄2条流,从kafka读取数据 将昨日注册数据存到状态中,TTL为2天,存到map状态中,key为注册日期,value为set,存储注册的uid 将登录流和注册流进行连接 来一条登录数据,去注册状态中get昨天的日期,然后判断登录的uid在不在set中,如果在,说明昨天注册的,那么留存数加1 get昨天的日期,取set的size,就是昨日注册数 开一个10分钟的窗口,每10分钟将留存数和昨日注册数存到Doris的原创 2023-08-12 22:16:17 · 504 阅读 · 0 评论 -
flink优化
大状态调优:在我们的项目中,在做新老访客修复时,我们将每个mid的访问时间都存到了状态里面,在做回流用户数时,我们将每个用户的登录时间都存到了状态里面,导致了大状态问题,由于hashmap状态后端会将数据存储到内存,所以就会出现内存不够的情况。我们的解决办法就是将状态后端改成了rocksdb,并且开启增量检查点和本地恢复去进行调优。原创 2023-08-12 16:59:15 · 885 阅读 · 0 评论 -
flink-对齐和不对齐,精准一次和至少一次
精准一次怎么保证?可以设置为以下2个 对齐 当有一个barrier比较快时,输入缓冲区阻塞,当另外一个barrier到来时,才进行备份,所以数据不会重复。 优点:不会造成数据重复 缺点:会造成数据积压,OOM 不对齐 当有一个barrier到来时,直接将barrier置到最后,然后将所有缓冲区的数据和状态进行备份,然后将kafka提交,然后将慢的barrier也置到最后,将所有缓冲区的数据和状态进行备份,然后将kafka提交。 优点:加快了ck 缺点:由于备份了大原创 2023-08-12 15:23:44 · 1530 阅读 · 0 评论 -
Flink-网络流控及反压剖析
参考:Apache Flink学习网原创 2023-08-11 21:26:45 · 1264 阅读 · 0 评论 -
Flink-间隔联结
间隔联结只支持事件时间 间隔联结如果遇到迟到数据,则会关联不上,比如来了一个5秒的数据,它可以关联前2秒的数据,后3秒的数据,就是可以关联3秒到8秒的数据,然后又来了一个6秒的数据,可以关联4秒到9秒的数据,那么3秒的数据,就永远不会被关联到了,就可以删除了,然后又来了一个迟到数据,比如4秒的数据,可以关联2秒到7秒的数据,但是3秒的数据已经被删除了,所以就关联不上了。对于这种情况,解决办法就是,使用回撤流,比如leftjoin,leftjoin可以设置状态过期时间,这个时间是系统时间,比如我们设置过原创 2023-08-09 17:34:49 · 959 阅读 · 0 评论 -
Flink CDC读取增量数据时是多并行度吗?
Flink CDC刚启动时,不是读取的binlog,而是全表扫描,所以可以用多并行度,后面增量同步的时候,就是单并行度。mysql会将一个库的变化数据放到一个binlog,而这个库里面所有的表变化数据都放到这一个binlog。Flink CDC可以同时读取多个表,封装成JSON,像Maxwell一样。Flink CDC读取全量数据时,是多并行度。Flink CDC读取增量数据时,是单并行度。原创 2023-07-29 16:25:16 · 535 阅读 · 0 评论 -
Flink-端到端精确一次(End-To-End Exactly-Once)
想要在故障恢复后不丢数据实际应用中,最难做到、也最希望做到的一致性语义,无疑就是端到端(end-to-end)的“精确一次”。我们知道,对于Flink内部来说,检查点机制可以保证故障恢复后数据不丢(在能够重放的前提下),并且只处理一次,所以已经可以做到exactly-once的一致性语义了。所以端到端一致性的关键点,就在于输入的数据源端和输出的外部存储端。原创 2023-07-19 13:25:06 · 402 阅读 · 0 评论 -
Flink AggregateFunction窗口函数,merge何时执行
在普通的翻滚窗口和滑动窗口中,窗口的范围是按时间区间固定的,虽然范围有可能重合,但是处理起来是各自独立的,并不会相互影响。但是会话窗口则不同,其范围是根据事件之间的时间差是否超过gap来确定的(超过gap就形成一个新窗口),也就是说并非固定。实际上,这个方法是专门为会话窗口(session window)服务的。下面来解析一下会话窗口。MergingWindowAssigner是一个抽象类,代码很简单,定义了用于合并窗口的mergeWindows()方法以及合并窗口时的回调MergeCallback。原创 2023-07-17 11:59:30 · 488 阅读 · 0 评论 -
Flink-intervalJoin源码和并行度问题
底层用的是connect把两个流的数据先保存到状态中先判断有没有迟到,迟到就放到侧输出流再根据范围找数据然后根据上界删除数据。原创 2023-07-11 20:32:31 · 792 阅读 · 0 评论 -
大数据之flink容错机制
大数据之flink容错机制。原创 2023-07-04 20:51:22 · 1003 阅读 · 0 评论 -
基于 Flink SQL CDC的实时数据同步方案
基于 Flink SQL CDC的实时数据同步方案。原创 2023-07-04 20:50:39 · 863 阅读 · 0 评论 -
Flink-手写Flink的UV
【代码】Flink-手写Flink的UV。原创 2023-07-04 19:54:14 · 189 阅读 · 0 评论 -
Flink-两阶段提交(two-phase-commit,2PC)
当中间发生故障时,当前未提交的事务就会回滚,于是所有写入外部系统的数据也就实现了撤回。这种两阶段提交(2PC)的方式充分利用了Flink现有的检查点机制:分界线的到来,就标志着开始一个新事务;所以2PC协议不仅真正意义上实现了exactly-once,而且通过搭载Flink的检查点机制来实现事务,只给系统增加了很少的开销。Flink提供了TwoPhaseCommitSinkFunction接口,方便我们自定义实现两阶段提交的SinkFunction的实现,提供了真正端到端的exactly-once保证。原创 2023-07-03 18:29:26 · 979 阅读 · 0 评论 -
Flink-JdbcSink
【代码】Flink-JdbcSink。原创 2023-06-29 19:08:16 · 731 阅读 · 0 评论 -
Flink-KafkaSink
【代码】Flink-KafkaSink。原创 2023-06-29 19:03:30 · 394 阅读 · 0 评论 -
Flink-任务槽和并行度的关系
而并行度是动态概念,也就是TaskManager运行程序时实际使用的并发能力,可以通过参数parallelism.default进行配置。假设一共有3个TaskManager,每一个TaskManager中的slot数量设置为3个,那么一共有9个task slot,表示集群最多能并行执行9个算子。整个流处理程序的并行度,就应该是所有算子并行度中最大的那个,这代表了运行程序需要的slot数量。和并行度都跟程序的并行执行有关,但两者是完全不同的概念。通过这个例子也可以明确地看到,,于是最终有三个任务节点。原创 2023-06-29 18:42:09 · 844 阅读 · 0 评论 -
Flink-面试题
1.实操:熟练书写Flink的WordCount代码原创 2023-06-26 21:36:38 · 839 阅读 · 0 评论 -
Flink-窗口源码
滚动窗口底层只有一个窗口,每次用for循环,把前面过期的数据移除,留下的数据再进行计算。滑动窗口的时间窗口,是有多个window的,因为有重叠的数据。计数窗口、计数滑动窗口,底层只有一个窗口。放窗口->触发器->process出结果。会话窗口只有一个window。原创 2023-06-25 19:48:36 · 634 阅读 · 0 评论 -
Flink-如果某一个并行度的watermark不推进导致整个下游的watermark无法推进,如何处理?
【代码】Flink-如果某一个并行度的watermark不推进导致整个下游的watermark无法推进,如何处理?原创 2023-06-21 13:29:10 · 321 阅读 · 0 评论 -
Flink的TopN
因为定时器是下游,水位线是取的多个上游的最小的, 水位线是跟在数据后面的,所以当定时器的时间到达时,上游一定计算完成了,并且数据已经在水位线之前到下游了,所以可以触发计算,就是当前窗口所有的数据,比如窗口是[8:00~9:00)不用也可以计算,但是是来一条计算一条,假如有10万条,效率低,用定时器计算,可以在数据到齐时,一起计算,效率高。一定要keyBy的原因:因为上游计算完成的有可能有[8:05~9:05)的数据,所以需要根据end分组。1.为什么定时器的时间设置为,窗口的end值+1ms就可以呢?原创 2023-06-21 10:00:54 · 681 阅读 · 0 评论 -
Flink问题
因为有的算子不是keyedStream,没有生命周期方法,需要实现chekpiintFuntion,重写init方法,获取state,至于状态的备份,都不用我们管,flink会自动备份,备份到jobManager的内存上,还可以备份到HDFS上,包括open方法获取的state,flink都可以自动备份。当需要获取有限数据的时候,就用window,比如获取最近10秒的数据,window就是在无界的数据流上,获取一部分数据进行计算。滑动窗口的时间窗口,是有多个window的,因为有重叠的数据。原创 2023-06-20 17:29:38 · 350 阅读 · 0 评论 -
Flink-滑动窗口
数据第一次来,5秒滑动一次,底层源码经过计算,571+5=576,取整得575,所以第一次的窗口为565-575,当事件时间到575的时候,触发计算,计算。可以看到,第一个窗口计算的时候,565到570是没有数据的,所以第一个窗口只计算了571到575的数据;第二个窗口虽然是570-580,但是只计算了571到580的数据;5秒滑动一次,下一个窗口是570-580,之后的窗口就可以计算完整的数据了。565-575窗口的数据;的时候,触发计算,计算。原创 2023-06-18 16:50:28 · 253 阅读 · 0 评论 -
Flink每日一考
有状态的流式计算框架。原创 2023-06-15 17:32:43 · 229 阅读 · 0 评论 -
Flink每日一考
条件:2个算子的并行度相同,分发规则为forword。概念:把多个算子合并,就称为算子链。并行度是指算子的并行程度。有状态的流式计算框架。原创 2023-06-13 12:13:15 · 54 阅读 · 0 评论 -
Flink JobManger包含3个不同的组件
(2)资源管理器(ResourceManager)(3)分发器(Dispatcher)原创 2023-06-13 10:10:00 · 293 阅读 · 0 评论 -
Flink的Yarn应用模式作业提交流程
3.3 生成执行流图 ExecutionGraph。9.2 生成物理流图 PhysicalGraph。3.1 生成逻辑流图 StreamGraph。3.2 生成作业流图 JobGraph。2.3 分发器启动JobMaster。5 启动TaskManager。3.4 注册、请求slot。2.2 启动资源管理器。原创 2023-06-12 21:23:19 · 129 阅读 · 0 评论 -
Flink算子链和slot共享的区别
map(1) -> filter(1) -> (假设在这里经过了keyby) windown(2) -> sink(2)原创 2023-06-12 17:25:38 · 371 阅读 · 1 评论