我有一个关于Apache Flink中两个以上流的联合的架构问题。
我们有三个甚至更多的流,它们是某种代码书,我们必须与它们一起丰富主流。代码书流是压缩的Kafka主题。代码本是不会经常更改的东西,例如货币。主流是一个快速的事件流。我们的目标是用代码书丰富主流。
在我看来,有三种可能的方法可以做到这一点:
public class CodebookData {
private Currency currency;
private OrganizationUnit organizationUnit
...
}
接下来,我将每个kafka主题的传入流映射到这个包装类,然后建立一个联合:
DataStream<CodebookData> enrichedStream = mappedCurrency.union(mappedOrgUnit).union(mappedCustomer);
当我打印CodebookData时,它是这样填充的
CodebookData{
Currency{populated with data},
OrganizationUnit=null,
Customer=null
}
CodebookData{
Curenncy=null,
OrganizationUnit={populated with data},
Customer=null
}
...
在这里我停下来,因为我有问题如何将此Codebook流与主流连接并将密码本数据保存为值状态。我在我的Codebook数据中没有唯一的外键,因为每个密码本都有自己的与主流连接的外键,例如。货币有电流ID、组织单位org ID等。例如。我想做这样的事情
SingleOutputStreamOperator<CanonicalMessage> enrichedMainStream = mainStream
.connect(enrichedStream)
.keyBy(?????)
.process(new MyKeyedCoProcessFunction());
在MyProcessFunction中,我将创建CodebookData类型的ValueState。
这是完全错误的还是我可以用它做些什么,如果它是我做错的两倍?
第二种方法是将一系列两个输入协处理函数操作符与每个kafka事件源级联,但我在某处读到这不是最佳方法。
第三种方法是广播状态,我并不太熟悉。现在我看到了问题所在,如果我使用RocksDb进行检查点和保存指向,我不确定是否可以使用广播状态。
我应该使用我目前正在努力的第一种方法中的其他方法吗?
在许多情况下,您需要像这样进行几个独立的扩展连接,更好的模式是使用扇入/扇出方法,并并行执行所有连接。
类似这样的情况,在确保主流上的每个事件都有一个唯一的ID之后,您可以创建每个事件的3个或更多副本:
然后,您可以按任何适当的方式为每个副本设置密钥—货币、组织单位等(或我从中获取此图的示例中的客户、IP地址和商户)—然后将其连接到适当的cookbook流,并独立计算每个双向联接。
然后将这些并行连接结果流联合在一起,按添加到每个原始事件的随机nonce键,并将结果粘合在一起。
现在在三个流的情况下,这可能过于复杂。在这种情况下,我可能只需要执行一系列三个双向连接,一个接一个,每次都使用keyBy和connect。但在某种程度上,随着时间的延长,以这种方式构建的管道往往会遇到性能/检查点问题。
这里有一个在中实现此扇入/扇出模式的示例https://gist.github.com/alpinegizmo/5d5f24397a6db7d8fabc1b12a15eeca6.
问题#1:我正在研究一个案例场景,在这个场景中,我们需要融合来自多个传感器(例如8个传感器)的数据,并以树的形式将它们连接起来。例如,将[s1、s2、s3和s4]连接起来形成流A,然后将[s5、s6、s7和s8]连接起来形成流B,然后对流A和B执行CEP。如何实现这一点? 问题#2:是否可以对多个流执行CEP,即多个流?。flink 1.3.2 API中明确提到,模式将应用于一个流 如果模式不能应
我正在尝试为ApacheFlink导入ScalaAPI流扩展,如中所述https://ci.apache.org/projects/flink/flink-docs-master/apis/scala_api_extensions.html 但是,我的ScalaIDE抱怨以下消息:对象扩展不是包的成员org.apache.flink.streaming.api.scala 我使用的是scala 2
我有以下代码来计算socketTextStream中的单词。累积字数和时间窗字数都是必需的。该程序存在累积计数始终与窗口计数相同的问题。为什么会出现这个问题?根据加窗计数计算累积计数的正确方法是什么?
除了这个用例,流还有很多问题 我有一个巨大的对象流
问题内容: 我想知道是否有一种方法可以使用ng-show等方法来有条件地显示内容,例如在骨干.js中,我可以对模板中的内联内容执行以下操作: 但在角度上,我似乎仅限于显示和隐藏包装在html标签中的东西 用angular推荐的仅使用{{}}而不是将内容包装在html标签中的有条件显示和隐藏inline内容的推荐方法是什么? 问题答案: 编辑:2Toad下面的答案是您正在寻找!支持那件事 如果您使用
我有一个通用的Streams API问题,我想“高效地”解决。假设我有一个(可能非常大,可能无限)流。我想以某种方式对其进行预处理,例如,过滤掉一些项目,并对一些项目进行变异。让我们假设这个预处理是复杂的,时间和计算密集型的,所以我不想做两次。 接下来,我想对项序列执行两组不同的操作,并使用不同的流类型构造处理每个不同序列的远端。对于无限流,这将是一个forEach,对于有限流,它可能是一个收集器