Flink1.17 笔记

Flink1.17 笔记

Flink容错重启策略

https://blog.csdn.net/weixin_43871785/article/details/132096500
https://blog.csdn.net/dwjlyl/article/details/127466438
image
image
image

KAFKA配置参数说明

https://blog.csdn.net/weixin_45965698/article/details/108402354
https://blog.csdn.net/dream8062/article/details/54969820

https://blog.csdn.net/yang_shibiao/article/details/118662134
image
https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/dev/datastream/fault-tolerance/broadcast_state/
https://blog.csdn.net/weixin_40659514/article/details/127258990

    1. 静态广播变量示例:
      Broadcast(广播数据) :通过withBroadcastSet(DataSet, String) 进行广播数据,并给这份数据起名字
      Access(获取数据):通过getRuntimeContext().getBroadcastVariable(String)获取广播出去的数据
      使用场景如: 黑名单判断,将黑名单广播出去进行数据匹配。
      注意:

1:广播出去的变量存在于每个节点的内存中,所以这个数据集不能太大。因为广播出去的数据,会常驻内存,除非程序执行结束。

2:广播变量在初始化广播出去以后不支持修改,这样才能保证每个节点的数据都是一致的。

个人建议:如果数据集在几十兆或者百兆的时候,可以选择进行广播,如果数据集的大小上G的话,就不建议进行广播了。

    1. 动态广播变量示例:
      使用场景: 数据依赖某些动态变化的处理规则

    广播流一般都是从kafka或其他数据源获取,这里演示直接固定了。从kafka获取流,修改数据后,下游也会更新广播流。

    key streaming 使用KeyedBroadcastProcessFunction.

    非key streaming 使用 BroadcastProcessFunction.

Flink包含8中分区策略

https://www.cnblogs.com/jmx-bigdata/p/13708873.html

  • GlobalPartitioner
  • ShufflePartitioner
  • RebalancePartitioner
  • RescalePartitioner
  • BroadcastPartitioner
  • ForwardPartitioner
  • KeyGroupStreamPartitioner
  • CustomPartitionerWrapper

flink 的 watermark 前进是靠数据推动的,如果没有数据进来,watermark 就无法前进。比如 kafka 一个 source subtask 消费了一个 partition,而这个 partition 没有数据,会导致这个 subtask watermark 一直不前进。这样的话,类似时间窗口这种算子就无法触发计算,这时候就需要 idle source 来解决这个问题。

source 有两种状态,idle 和 active。idle 状态是下游不需要等待这个流的 watermark;active 是正常运行状态。

例如一个 10 partition,source 并发为 10 的作业,source 之后接 keyby + window,假设一个 partition 0 突然没数据了:

如果没有将 partition 0 对应的 source 标记为 idle,下游 window 将一直没法触发计算,因为有一条流的 watermark 一直没前进。

如果将 partition 0 对应的 source 标记为 idle,这样下游 window 只需要等其他 9 个流 watermark 超过 window 上边界就可以触发计算。

在 SQL 中如何设置 Idle source:

通过 table.exec.source.idle-timeout 设置 source subtask 多久没有数据就自动置为 idle source. 例如 table.exec.source.idle-timeout = '30 s', 即 30s 没有数据,该 subtask 会置为 idle. 一旦后续该 subtask 有数据过来,又会变为 active 状态。

需要特别注意的是,这个配置在某些情况下可能会导致数据丢失. 例如有一个 partition 由于某些原因一直没有读到数据,idle-timeout 时间之后,下游将不再等这个 source subtask 的 watermark,这样下游的 watermark 将会前进,如果这个 partition 后续正常读到了数据,可能会因为比 watermark 晚而丢弃。

二、watermark不更新怎么办?

如果有一个source一直没有事件流入,会发生什么?

因为没有任何事件流入,Flink流处理系统时钟将无法运作。source的这种情况,把它称之为IDLE source(空闲source)。在这种情况下,会因为某个task时钟没有推进,从而导致window无法触发计算。

在Flink中,我们可以使用withIdleness来设置空闲的source。

SingleOutputStreamOperator<Tuple2<String, Long>> wordWithTsDS =
        wordSource.assignTimestampsAndWatermarks(WatermarkStrategy
                .<Tuple2<String, Long>>forBoundedOutOfOrderness(Duration.ofSeconds(5))      // 设置水印允许延迟5秒
 .withIdleness(Duration.ofSeconds(15))                                       // 设置空闲source为15秒
 .withTimestampAssigner((event, timestamp) -> event.f1));                    // 提取事件时间

这样,在window计算的时候,如果某个source超过15秒没有事件流入,就会被标记为IDLE source,window在计算watermark的时候,会忽略该source。
https://blog.csdn.net/weixin_32880357/article/details/112996771
https://blog.csdn.net/a772304419/article/details/132664670

Scala Random

以下是一个Scala中使用Random类的示例:

import scala.util.Random

object RandomDemo extends App {
  val random = new Random()

  // 生成一个随机的整数
  val randomInt: Int = random.nextInt()

  // 生成一个随机的浮点数
  val randomDouble: Double = random.nextDouble()

  // 生成一个随机的布尔值
  val randomBoolean: Boolean = random.nextBoolean()

  // 生成一个随机的字符
  val randomChar: Char = random.nextPrintableChar()

  // 生成一个随机的字符串
  val randomString: String = random.alphanumeric.take(10).mkString

  println(s"随机整数: $randomInt")
  println(s"随机浮点数: $randomDouble")
  println(s"随机布尔值: $randomBoolean")
  println(s"随机字符: $randomChar")
  println(s"随机字符串: $randomString")
}

这个示例展示了如何使用Random类生成随机的整数、浮点数、布尔值、字符和字符串。

Windows/Linux 使用 split 命令分割大文件

https://www.qyyshop.com/info/621705.html
Windows/Linux 使用 split 命令分割大文件
https://www.zhangbj.com/p/337.html

参考

https://blog.csdn.net/qq_42009405/article/details/127262065
https://blog.csdn.net/qq_35514685/article/details/123232738

posted @ 2023-10-30 18:31  三里清风18  阅读(198)  评论(0)    收藏  举报