Kafka:用户如何通过菜单或决策树选择多个选项?
Kafka: how could several options be picked up modulated by users via a menu or decision tree?
我根据键对输入数据进行分组,然后在聚合器中进行 1 分钟 window 和 30 秒跳跃。
应用程序正在发送和使用数据,并且此应用程序的需求可能会在未来发生变化,因此,我认为需要未来的灵活性和快速变化。
当前逻辑描述如下:
@StreamListener("input")
public void process(KStream<String, Data> DataKStream) {
JsonSerde<DataAggregator> DataJsonSerde =
new JsonSerde<>(DataAggregator.class);
DataKStream
.groupByKey()
.windowedBy(TimeWindows.of(60000).advanceBy(30000))
.aggregate(
DataAggregator::new,
(key, Data, aggregator) -> aggregator.add(Data),
Materialized.with(Serdes.String(), DataJsonSerde)
);
}
DataAggregator.java
public class DataAggregator {
private List<String> dataList = new ArrayList<>();
public DataAggregator add(Data data) {
dataList.add(data.getId());
System.out.println(dataList);
return this;
}
public List<String> getDataList() {
return dataList;
}
}
但是,鉴于不断变化的需求,我想让用户可以通过菜单更改逻辑。
例如,用户可以随意更改 window 或更改数据隔离的方式。
我可能会考虑编写几个 java 类 可以在用户选择特定选项时打开和关闭。
但我想知道是否可以做一些更好、更动态的事情。
使用 Flink,当作业处于 运行 时无法更改某些内容 -- 值得注意的是,作业图的拓扑结构和运算符的并行性。
另一方面,可以在整个集群中广播控制流以影响业务逻辑的动态变化。在简单的情况下,这已用于修改过滤器参数;在更复杂的情况下,它已被用于触发转换中使用的代码或机器学习模型的动态加载(例如,通过广播 PMML)。
示例用例:RBEA: Scalable Real-Time Analytics at King, StreamING models, how ING adds models ... 。
不太明显的是如何动态重新配置聚合。开源欺诈检测演示 (part 1, part 2, github) 说明了如何实现这一点。
另一个例子,参见Cogynt: Flink without code。
我根据键对输入数据进行分组,然后在聚合器中进行 1 分钟 window 和 30 秒跳跃。
应用程序正在发送和使用数据,并且此应用程序的需求可能会在未来发生变化,因此,我认为需要未来的灵活性和快速变化。
当前逻辑描述如下:
@StreamListener("input")
public void process(KStream<String, Data> DataKStream) {
JsonSerde<DataAggregator> DataJsonSerde =
new JsonSerde<>(DataAggregator.class);
DataKStream
.groupByKey()
.windowedBy(TimeWindows.of(60000).advanceBy(30000))
.aggregate(
DataAggregator::new,
(key, Data, aggregator) -> aggregator.add(Data),
Materialized.with(Serdes.String(), DataJsonSerde)
);
}
DataAggregator.java
public class DataAggregator {
private List<String> dataList = new ArrayList<>();
public DataAggregator add(Data data) {
dataList.add(data.getId());
System.out.println(dataList);
return this;
}
public List<String> getDataList() {
return dataList;
}
}
但是,鉴于不断变化的需求,我想让用户可以通过菜单更改逻辑。
例如,用户可以随意更改 window 或更改数据隔离的方式。
我可能会考虑编写几个 java 类 可以在用户选择特定选项时打开和关闭。
但我想知道是否可以做一些更好、更动态的事情。
使用 Flink,当作业处于 运行 时无法更改某些内容 -- 值得注意的是,作业图的拓扑结构和运算符的并行性。
另一方面,可以在整个集群中广播控制流以影响业务逻辑的动态变化。在简单的情况下,这已用于修改过滤器参数;在更复杂的情况下,它已被用于触发转换中使用的代码或机器学习模型的动态加载(例如,通过广播 PMML)。
示例用例:RBEA: Scalable Real-Time Analytics at King, StreamING models, how ING adds models ... 。
不太明显的是如何动态重新配置聚合。开源欺诈检测演示 (part 1, part 2, github) 说明了如何实现这一点。
另一个例子,参见Cogynt: Flink without code。