我试图理解ProcessWindowFunction中可以使用的各种状态的差异
首先,ProcessWindowFunction是一个AbstractRichFunction
abstract class ProcessWindowFunction[IN, OUT, KEY, W <: Window]
extends AbstractRichFunction {...}
获得状态
getRuntimeContext().getState
此外,WindowProcessFunc
我需要我的flink作业以指定的间隔从数据库中提取记录,并在处理后将其存档。我已经实现了SourceFunction以从数据库中获取所需的记录,并添加了SourceFunction作为StreamExecutionEnvironment的源。如何指定StreamExecutionEnvironment需要每隔10分钟使用SourceFunction从数据库中获取记录
SourceFunction:
public class MongoDBSourceFunction implements Sou
流处理的教科书示例是一个带时间戳的字数计算程序。使用以下数据示例
mario 10:00
luigi 10:01
mario 11:00
mario 12:00
我在以下几家公司看到过单词计数程序:
总数据集
mario 3
luigi 1
一组时间窗口分区
mario 10:00-11:00 1
luigi 10:00-11:00 1
mario 11:00-12:00 1
mario 12:00-13:00 1
但是,我没有发现滚动时间窗口上的字数计算程序示例,即我希望从时间开始每小时
我知道stackoverflow上也有类似的问题,但在调查了其中几个问题后,我知道了
保存点手动触发,而检查点被触发
自动地
它们使用不同的存储格式
但这些并不是令人困惑的地方,我不知道什么时候该用一个,什么时候该用另一个
考虑以下两种情况:
如果由于某种原因(例如错误修复或意外崩溃)需要关闭或重新启动整个应用程序,那么我必须使用savepoint来恢复整个应用程序
我认为,checkpoint仅在Flink内部用于应用程序运行时的容错,也就是说,应用程序本身正在运行,但任务或其他事情可能会失败
获取以下flink作业提交错误
@centos1 flink-1.10.0]$ ./bin/flink run -m 10.0.2.4:8081 ./examples/batch/WordCount.jar --input file:///storage/flink-1.10.0/test.txt --output file:///storage/flink-1.10.0/wordcount_out
Job has been submitted with JobID 33d489aee84840
所以,我试图弄清楚Beam DoFn中静态变量的行为,
它在线程之间(在同一个JVM中)共享吗
基本上是试图从编程指南中了解以下内容:
4.3.2。线程兼容性
…请注意,函数对象中的静态成员不会传递给工作实例,并且多个
可以从不同的线程访问函数的实例
现在,下面的静态对象“counter”似乎已初始化、序列化并应用于worker(Flink引擎),它是否与上面的语句一致
如果工作线程落在不同的进程/JVM中,显然不会共享。但是,如果落到同一个JVM上,“计数器”会被共享吗
public cla
在ApacheFlink中定义和执行流处理器的作业图之前,我想运行一些初始化代码,例如,用于创建Kafka主题,我将其用作作业图中的接收器。
但是,当从保存点还原流处理器时(例如,在流处理器更新期间),不应运行此初始化代码。有没有办法通过编程检查作业是否从保存点启动?从保存点重新启动作业时,必须指定保存点目录的路径
我们的做法如下:
$ bin/flink run -s :savepointPath [:runArgs]
如果我正确理解了您的问题,您所要做的就是验证是否指定了-fromSave
如果我想在纱线上运行flink作业,命令是
/bin/flink run-m纱线簇。/examples/batch/WordCount.jar
但该命令将运行一个默认集群,该集群有2个TaskManager;
如果我只是子MMIT单个作业,为什么默认TaskManager设置为2
什么时候我需要在单个作业中使用多个taskmanager?任何分布式数据处理框架的基本思想都是跨多个计算节点运行同一个作业。这样,对于一个特定节点处理过多数据的应用程序,只需扩展到多个节点,理论上可以处理任意数量的数据
我用Flink 0.10 SNAPSHOT编写了这段代码,但我得到了一个运行时错误,我不太明白
代码如下:
DataStream kafkaThings=env.addSource
新FlinkKafkaConsumer082
thing\u data,//要读取的主题
new ThingSchemaAreader,//反序列化器作为util提供
道具
;
卡夫卡廷
.flatmap新事物flatmapper
.添加新的内容接收器;
这是flatMap步骤的运行时错误,我想…:
06:16:20
FLINK Stream API socketTextStream(主机名、端口)方法充当客户端。也就是说,我们需要在端口上发送连续流,“sockettexstream(hostname,port)”方法将读取传入流
但我的要求是,我想使用FLINK作为服务器,并寻找一个可以从端口侦听的API。
任何人都可以使用FLINK stream API吗?那将解决我的问题。
提前感谢
//Flink中不支持这种内置功能,但如果您真的想,可以将服务器构建到flatmap操作符或ProcessFunctio
我正在尝试关闭在junit集成测试期间启动的StreamExecutionEnvironment。一旦处理了流中的所有项,我希望能够以确定的方式关闭这个执行环境
现在,当我调用StreamExecutionEnvironment.execute方法时,它永远不会从该调用返回。[可能我在这里太迟了,但会为那些正在寻找答案或提示的人解答]
实际上,您需要做的是优雅地退出。
然后整个StreamExecutionEnvironment将自动关闭。为此,您可能需要一个特殊的结束事件来发送到源函数中
写入
我有一个flink应用程序从AWS Kinesis流读取数据。生产者应用程序以每秒600条记录的速率写入Kinesis流
我想知道在实时生产环境中停止flink应用程序的最佳实践是什么,而生产商仍在向流写入数据,而不会丢失输入流数据
我认为需要停止应用程序以进行计划维护、应用程序部署更改等。您应该使用保存点,它使您能够存储flink应用程序的内部状态,并从该时间点进一步重新启动应用程序
有关更多信息,请参阅“您应该使用保存点”,它使您能够存储flink应用程序的内部状态,并从该时间点重新启动应用
参考:
定义:“插槽共享单元定义可以在插槽中一起部署哪些不同的任务(来自不同的作业顶点)。”
有人能详细说明一下吗?插槽定义TaskManager的固定资源片。每个子任务(操作符的并行实例)都需要一个插槽才能执行
由于并非所有的运营商都是同样的资源密集型运营商,其中一些运营商比其他运营商需要更多的内存或cpu周期。为了更好地利用资源,Flink允许将不同操作员的子任务部署到同一个插槽中
哪些操作员可以部署到同一插槽由SlotSharingGroup控制。共享同一插槽共享组的任务可以在同一插槽中执
我在Flink上运行许多作业,后端使用rocksDB,
我的一个作业出错,整夜重新启动
错误消息如下:
java.lang.IllegalStateException: Could not initialize keyed state backend.
at org.apache.flink.streaming.api.operators.AbstractStreamOperator.initKeyedState(AbstractStreamOperator.java:330)
我已经构建了一个ApacheFlink应用程序,并将其打包在一个胖罐子中。结果文件大小为~114 MiB。当我试图用Flink的web UI上传它时,它陷入了“保存…”阶段。如果我使用curl手动上传,结果是“413请求实体太大”:
那么,有什么选择呢
UPD:我可以在/tmp/flink web UUID/flink web upload/UUID/flink all.JAR中看到JAR,但它不被flink识别(在UI上不可见)。好的,很容易修复
首先,我扫描了他们的回购协议,发现“太大”的字
当我尝试在flatMap操作符中写入OUT集合时,我得到非法状态异常(仅在高负载下):缓冲池被破坏
我怎么会在这里?当flink抛出缓冲池错误时
java.lang.RuntimeException: Buffer pool is destroyed.
at org.apache.flink.streaming.runtime.io.RecordWriterOutput.pushToRecordWriter(RecordWriterOutput.java:110)
at or
假设我有这个
class FooProcess extends ProcessAllWindowFunction[String,String, TimeWindow]{
override def process(context: Context, elements: Iterable[String], out: Collector[String]): Unit = ???
}
我想为process方法编写一些单元测试,但在模拟上下文时遇到了一些问题
val context = mock[Co
我在flink的文档中看到了以下信息——将相应的jar复制到插件目录以使用s3。
如果我使用Kubernetes部署Flink,我该怎么做
要使用flink-s3-fs-hadoop或flink-s3-fs-presto,请在启动flink之前将相应的JAR文件从opt目录复制到flink发行版的plugins目录,例如
mkdir./plugins/s3fs presto
cp./opt/flink-s3-fs-presto-1.9.0.jar./plugins/s3 fs presto/如果
这里有多个任务。其中一项任务是bookingfwithfraudanddefaultandmainsp->tsandwmbookinghwithspobjects。我们把它称为任务1。在任务1中,我分配一个时间戳并生成水印,我使用boundedAutofordernessTimestampExtractor,其maxOutOfOrderness等于2min
下一个操作符是我打开数据窗口并在其上进行一些聚合,然后将其放入卡夫卡。让我们把这个聚合和下沉的链式任务称为task-2
numLateRec
我有一个数据流,其中包含一个键,我需要将其与与该键关联的数据进行混合和匹配。每个键都属于一个分区,每个分区都可以从数据库加载
数据非常大,在一个任务管理器中,几十万个分区中只有几百个可以容纳
我目前的方法是基于键.partition使用partitionCustom,并将分区数据缓存在RichMapFunction中,以进行混合和匹配,而无需多次重新加载分区的数据
当同一分区上的消息速率太高时,我遇到了热点/性能瓶颈
在这种情况下,我在Flink中有哪些工具可以提高吞吐量
有没有办法根据机器上的
我正在尝试深入研究新的有状态函数方法,并且已经尝试手动创建保存点()
它就像一个符咒,但我找不到一种方法,如何自动做到这一点。例如,我有数百万个密钥,需要将它们全部写入savepoint。您的问题是如何将示例中的env.fromElements替换为从文件或其他数据源读取的内容?Flink的DataSet API(此处使用)可以从任何HadoopInputFormat读取。有关详细信息,请参阅
对于常见情况,有易于使用的快捷方式。如果您只想使用TextInputFormat从文件中读取数据,则如
在Flink 1.11上,有一个WindowWordCount程序使用keyBy(),但是,这种方法不受欢迎,我找不到任何例子说明如何在不使用keyBy()的情况下重写它。如有任何建议,将不胜感激
我使用Intellij;它警告keyBy()已弃用。这是我能找到的唯一一个。采用整数或字符串参数的keyBy格式已被弃用。您应该使用keyBy的形式,它接受KeySelector函数,例如replace
stream.keyBy(“id”)
与
stream.keyBy(事件->事件id)
替换
我已经在yaml配置文件中设置了warn.container.vcores=1,并用
warn-session.sh-jm 1024-tm 2048-n4-s3
使用上面的命令,我启动了4个任务管理器,每个TM只分配1个vcore,而且每个TM有3个任务槽
假设我在TM中运行了3个子任务,那么每个任务槽都有一个子任务
这3个子任务是否可以与3个线程同时运行(使用3个cpu内核,vcore=1不生效),或者它们只能与一个线程同时运行(vcore=1生效)无论有多少内核可用,每个任务都将有自己的JV
并阅读以下代码:
// **********************
// BLINK STREAMING QUERY
// **********************
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.table.api.EnvironmentSettings
import org.apache.flink.table.api.bridg
在Flink中,像“flatMap”、“map”之类的操作符称为Task,如果我将flatMap的并行度设置为30,那么这个任务有30个子任务
现在,如果我只有一个插槽,它会在一个插槽中产生多个线程吗?还是每个插槽只有一个线程
Flink会在该插槽中创建30个线程,还是使用类似于线程池的东西
编辑:
上面的例子并不恰当
假设在作业中我有操作符flatMap和map,它们都有并行度1,我只有一个插槽,这个插槽会创建两个线程吗?(禁用链接)每个任务槽可以包含多个子任务(运算符)。但是,一个插槽不能包
标签: Apache Flink
flink-streamingflink-cepflink-batchflink-statefun
让我解释一个我需要处理的场景。假设有三个设备A、B、C正在向flink CEP发送日志以进行处理。让我们假设模式为A接5分钟B接5分钟C。让我们假设一个场景,其中B设备停机,并在50分钟后发送日志。因此,在这种情况下,所有事件都将被删除。我只是想知道flink中是否有支持将状态保持在特定定义的时间间隔内(比如在我的案例中为1天,这意味着a和C日志都将存储1天,如果不匹配,日志将被删除)。请从CEP的角度提出可行性建议。据我所知,在之前或在内没有比更具体的东西,但这些都是用来指定t的。这取决于您的
我使用Flink CEP检测卡夫卡事件的模式。为简单起见,事件只有一种类型。我试图检测连续事件流中字段值的变化。代码如下所示
val streamEnv = StreamExecutionEnvironment.getExecutionEnvironment
streamEnv.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
streamEnv.addSource(new FlinkKafkaConsumer[..]())
假设窗口大小为10秒,水印间隔为1秒,松弛时间为5秒
(例如,使用boundedAutofordernessTimestampExtractor),当应用程序首次启动时,这是否意味着第一个窗口要到15秒才会触发(以考虑窗口处理中包含的所有事件的5秒延迟)
另外,窗口是按历元间隔触发的,这又是如何工作的呢?当足够大的水印到达窗口时,第一个窗口将触发,而这与应用程序运行的时间无关。让我们考虑几个例子:
(1) 如果您正在处理历史数据,那么仔细检查足够的数据以触发第一个窗口可能只需要几分之一毫秒
(2
我试图理解Flink中描述的AggregateFunction。总共有四种方法,
创建累加器
加
获得结果
合并
据我了解,
createAccumulator方法在第一个元素进入新窗口时被调用,新创建的实例将被进一步使用
调用add方法以根据定义减少结果,这将使用在createAccumulator方法中创建的实例
getResult方法在窗口关闭时调用,并返回可用结果
我对上述方法的理解是否正确?最后,merge方法的用例是什么,何时使用/调用它?我不清楚可用的定义。当两个窗口合并时,会调用
我有一个flink作业(2个任务管理器),作业并行度为64,任务槽为64
我将其中一个操作符的并行度设置为16。此运算符(16并行)插槽未在两个任务管理器中均匀分布。它通常需要更高的任务槽,比如一个任务管理器中的10/11和另一个任务管理器中的5/6
我正在使用flink版本1.11.2。我尝试添加cluster.allowed-spread-out-slot:是的,但没有效果。非常感谢任何解决方案我不相信您还能做什么。Flink调度程序将尝试将使用者任务与其生产者放在同一位置,以利用网络堆栈中
我使用MapStateDescriptor进行有状态计算。这里有一些代码
final val myMap=new-MapStateDescriptor[String,List[String]](myMap,classOf[String],classOf[List[String]])
在计算过程中,我想通过向列表[String]添加新元素来更新地图
可能吗
更新#1
已编写以下def来管理我的地图
def updateTagsMapState(mapKey: String, tagId: Stri
在处理了数以百万计的事件/数据之后,哪里是存储信息的最佳位置,可以说保存数以百万计的事件是值得的?我看到一个封闭的拼花格式,但是,默认的是HDFS?我关心的是保存后(在哪里?)是否容易(快速!)检索到该数据?Apache Flink没有与特定的存储引擎或格式耦合。存储Flink计算结果的最佳位置取决于您的用例
您正在运行批处理作业还是流式作业
你想对结果做什么
您是否需要对数据进行批量(完全扫描)、点式或连续流式访问
数据的格式是什么?平面结构(关系)、嵌套、blob等
根据这些问题的答案,
我有一个Flink服务器,它运行多个流媒体作业。这些作业是使用flink run命令启动的,基本上一直运行到您停止它们为止。现在我想取消一项特定的工作。当我使用flink list时,我会得到如下结果:
------------------ Running/Restarting Jobs -------------------
10.12.2015 08:30:37 : d6aeefaa2295ce122b65037805db0891 : Flink Streaming Job (RUNNING
是否有关于将应用程序DAG转换为物理DAG时执行的优化内容(以及如何执行)的文档?这是的“官方”页面,但非常不完整。
我还直接在上的源代码中找到了其他信息,但很难阅读和理解
还可以找到其他信息(平流层是Flink在被Apache孵化之前的名字)以及更多的理论文档
我希望将来能更好地记录它:-)
我们想知道是否有人对ApacheFlink在长寿命状态(天、周、月)下的表现有经验
问题
我们的业务被要求提供订单/发货流程的近实时分析。在我们的场景中,这些过程可能会运行一段时间。订单完成并发货可能需要几个月的时间。我们希望提供一些检查,例如时间限制或缺少活动
待验证的想法
我们认为将这些检查作为ApacheFlink作业来实现可能是一个好主意。由于我们将拥有长寿命的状态,利用ApacheFlink状态后端并等待(有时几个月)直到订单完成是一个好主意吗?
我发现了一个关于谷歌数据流的类似问题:
关于将新任务/作业管理器添加到现有正在运行的集群,可在此处()找到该过程。
但是,如果关闭群集并再次启动,则有关添加主机的信息将丢失。
将新主机添加到集群以同时更新和保存所有节点上的“主”和“从”配置文件是否安全?是的,这是绝对安全的。在启动脚本中,来自主文件和从文件的信息是只读的
我刚接触Flink,正在尝试做一些练习,当我使用带有kafka连接器的窗口时,我遇到了一个问题
代码如下所示:
val env:StreamExecutionEnvironment=StreamExecutionEnvironment.getExecutionEnvironment
.....
//以名称作为密钥的KeyedStream
val eventsStream:KeyedStream[自定义对象,字符串]=环境
.addSource[CustomedObject](source.get
我正在开发一个协处理函数,它使用第三方库根据某些规则检测特定的事件模式。因此,最后,ProcessElement1方法基本上是将事件转发到此库并注册回调,以便在检测到匹配时,协处理函数可以发出输出事件。为了实现这一点,回调依赖于对ProcessElement1中的out:Collector[T]参数的引用
话虽如此,我不确定Flink是否很好地支持此用例,因为:
第三方库可能跨越多个线程(假设我无法控制跨越的线程数量,这由库决定)
我不确定Flink是否会重新创建out,或者在某个时候做些什么,
如何配置Flink,使TaskManager在出现故障后自动重新启动?On和kubernetes Flink有一个本机资源管理器(YarnResourceManager和KubernetesResourceManager),将安排请求的可用插槽数。在其他环境中,您需要使用特定于集群框架的机制来自己解决这个问题
请注意,对于k8s,这个新的、更多由KubernetesResourceManager实现的组件只支持会话集群。作业集群仍然需要以老式的方式进行管理,如中所述
还有一些托管Flink环境,
我是Flink的新手,计划在EKS上部署Flink会话集群,配置1个作业管理器和5个任务管理器(每个任务管理器有4个插槽)。对于不同的用例,将通过UI提交不同的作业
假设我提交了一个有状态作业(作业具有使用RichFlatMapFunction的简单计数器逻辑),由RocksDBStateBackend支持,S3 checkpointDataUri和DbStoragePath指向本地文件路径,该作业总共使用8个插槽,分布在两个任务管理器中,一天内运行良好,没有任何问题。下面是我的问题,
1) 我
我想修改jobGraph,如getVertices()、ColocatingGroup(),我尝试了以下操作:
val s = StreamExecutionEnvironment.getExecutionEnvironment
val p = new Param()
s.addSource(new MySource(p))
.map(new MyMap(p))
.addSink(new MySink(p))
val g = s.getSt
我使用以下命令将我的流应用程序提交到应用程序flink run命令将启动java进程CliFrontend
flink run -d -m yarn-cluster -yqu Queue1 -yn 6 -ynm MyFlinkApp -c my.CheckpointTest ./flink.kafka.exploration-1.0-jar-with-dependencies.jar
上面的命令使用分离模式提交应用程序,因此当作业启动时,linux shell终端返回
然后我ps-ef |
我正在构建一个类来帮助监视多个运算符的数值性能。我目前的想法是创建一个类似于update()的方法,并在每次操作员需要更新某些内容时调用此方法。但是,这意味着我需要创建一个对象,该对象对我希望监视的每个操作员都可见。这可能吗?还是会有更好的解决方案?谢谢 如果您知道所有操作员都在单个JVM中运行(您有一个任务管理器),那么您可以创建一个所有操作员都可以用来记录活动的单例
如果它是一个具有多个TMs的Flink集群,那么每个TMs都在各自的JVM中运行,因此您必须使用一些分布式系统来记录此活动
俗
当我点击提交按钮时,出现了一些错误,如java.lang.OutOfMemoryError,详细信息如下:
原因:java.lang.OutOfMemoryError:元空间
我的任务管理器配置为:
taskmanager.memory.jvm-metaspace.size 512mb
这个问题首先对我来说,我已经执行了好几天的作业成功了,今天早上我做的是多次取消测试单个作业来测试接收器问题
我有一个ML模型,它接受两个numpy.ndarray-用户和项目-并返回一个numpy.ndarray预测。在普通Python代码中,我将执行以下操作:
模型=负载\模型
df=加载数据数据帧包括4列,即用户id、电影id、分级和时间戳
用户=df.user\u id.values
项目=df.movie\u id.values
预测=模型用户、项目
我正在考虑将此代码移植到Flink中,以利用其分布式特性。我的假设是:通过在多个Flink节点上分配预测工作负载,我应该能够更快地运行整个预测
我在同一份flink jobs中读了两个卡夫卡主题
Stream1:来自第一个主题的消息将保存到rocksdb,然后它将与stream2合并
Stream2:来自第二个主题的消息使用stream1保存的状态进行了丰富,然后它将与stream1合并
主题1和主题2是不同的来源,但两个来源的输出基本相同。我必须用topic1的数据来充实topic2的数据
这里是流动
val stream1 = readKafkaTopic1().keyBy(_.memberId).map(saveMemberD
我试图通过将flink env对象传递给flatMap对象,在flatMap中使用表api。但我得到了序列化异常,这表明我添加了一些无法序列化的字段
你能解释一下吗
问候,,
Sajeev您不能将执行环境传递到函数。这就像把弗林克传给弗林克一样
表API是数据集/数据流API之上的抽象。如果要同时使用表API和低级API,可以使用TableEnvironment#toDataSet/fromdaset在API之间进行更改,甚至在数据集操作符之间进行更改
DataSet<Integer>
Flink中数据集上的异步I/O等效于什么?对于数据流而言,其基本上是异步数据流
在map函数中执行阻塞调用
他们有什么最佳实践吗?我将使用RichMapPartitionFunction实现这一点,该函数提供了输入的迭代器和发出结果的收集器
由于DataSet API不需要与检查点机制集成,并且尊重记录和时间戳的顺序,虽然MapPartitionFunction没有提供任何异步特定的工具,但是实现应该不会太复杂。RichMapPartitionFunction可以在集群中的其他工作线程上并行运
ApacheFlink提供了一种容错机制来一致地恢复数据流应用程序的状态。该机制确保即使在出现故障的情况下,程序的状态最终也会精确地反映数据流中的每条记录一次
我需要理解以下链接中的答案:
这是否意味着Flink Sink将向Cassandra这样的外部系统生成重复事件
例如:
1-我有以下流程:源->带状态的平面映射->接收器,配置的快照间隔为20秒
如果任务管理器在两个快照之间(在形成最后一个快照的10秒之后和下一个快照的10秒之前)停止(终止),会发生什么情况
我知道Flink将从最后一
我们正在使用async操作符进行API调用,有时会失败。我们希望在某些自定义时间间隔内再次重试同一事件。失败也可能是由于一些调用后验证,因此由代码触发。我们发现这一点:不确定这是否已经实施。如果没有,还有出路吗?也许在延迟后使用一个操作符将事件推回到异步操作符?或者在过滤后将需要重试的事件推回到输入流?目前,Flink不支持可重试的异步操作。目前最好的解决方案是在用户代码中实现重试逻辑。您可以看一看如何天真地执行此操作的示例。这篇关于Flink-11909的评论建议用户可以实现自己的重试逻辑。不
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 51 页