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