Flink消费Kafka如何保证相同标识消息的有序性

Flink消费Kafka如何保证相同标识消息的有序性,第1张

在某些情况下,我们需要保证flink在消费kafka时,对于某些具有相同标识的消息,要保证其顺序性。

比如说具有相同uuid的用户行为消息,要保证其消息的顺序性,这样才能有效分析其用户行为。

问题:

kafka只能保证同一个partition内的消息是顺序性的,但是整个topic下并不能保证是顺序的,那么该如何解决呢?

<1> 在生产消息时,就将具有相同uuid的消息分配到同一个分区中。

扩展:kafka topic消息分配partition规则

源码:

通过源码,分区器就会根据消息里面的分区参数key值将消息分到对应的partition。

1)如果没有指定key值并且可用分区个数大于0时,在就可用分区中做轮询决定改消息分配到哪个partition

2)如果没有指定key值并且没有可用分区时,在所有分区中轮询决定改消息分配到哪个partition

3)如果指定key值,对key做hash分配到指定的partition

相关实现方案链接: >

1、fromCollection(Collection) - 从 Java 的 JavautilCollection 创建数据流。集合中的所有元素类型必须相同。

2、fromCollection(Iterator, Class) - 从一个迭代器中创建数据流。Class 指定了该迭代器返回元素的类型。

3、fromElements(T …) - 从给定的对象序列中创建数据流。所有对象类型必须相同。

4、fromParallelCollection(SplittableIterator, Class) - 从一个迭代器中创建并行数据流。Class 指定了该迭代器返回元素的类型。

5、generateSequence(from, to) - 创建一个生成指定区间范围内的数字序列的并行数据流。

1、readTextFile(path) - 读取文本文件,即符合 TextInputFormat 规范的文件,并将其作为字符串返回。

2、readFile(fileInputFormat, path) - 根据指定的文件输入格式读取文件(一次)。

3、readFile(fileInputFormat, path, watchType, interval, pathFilter, typeInfo) - 这是上面两个方法内部调用的方法。它根据给定的 fileInputFormat 和读取路径读取文件。根据提供的 watchType,这个 source 可以定期(每隔 interval 毫秒)监测给定路径的新数据(FileProcessingModePROCESS_CONTINUOUSLY),或者处理一次路径对应文件的数据并退出(FileProcessingModePROCESS_ONCE)。你可以通过 pathFilter 进一步排除掉需要处理的文件。

实现:

重要注意:

socketTextStream(String hostname, int port) - 从 socket 读取。元素可以用分隔符切分。

addSource - 添加一个新的 source function。例如,你可以 addSource(new FlinkKafkaConsumer011<>(…)) 以从 Apache Kafka 读取数据。

1、基于集合:有界数据集,更偏向于本地测试用

2、基于文件:适合监听文件修改并读取其内容

3、基于 Socket:监听主机的 host port,从 Socket 中获取数据

4、自定义 addSource:大多数的场景数据都是无界的,会源源不断的过来。比如去消费 Kafka 某个 topic 上的数据,这时候就需要用到这个 addSource,可能因为用的比较多的原因吧,Flink 直接提供了 FlinkKafkaConsumer011 等类可供你直接使用。你可以去看看 FlinkKafkaConsumerBase 这个基础类,它是 Flink Kafka 消费的最根本的类。

5、flink目前支持的source详细可以阅读官网connects部分;

以上就是关于Flink消费Kafka如何保证相同标识消息的有序性全部的内容,包括:Flink消费Kafka如何保证相同标识消息的有序性、基于flink sql构建实时数据仓库、Flink--对DataSource的理解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9743050.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存