当前位置: 首页 > 知识库问答 >
问题:

为什么窗口现在适用于Kafka Streams?

连德义
2023-03-14

我正在我的日食上运行一个简单的Kafka Streams程序,该程序正在成功运行,但它无法实现窗口化概念。

我想在5秒的窗口内将收到的所有消息处理到输出主题。我谷歌了一下,明白了我需要实现翻滚窗口的概念。但是,我看到输出立即发送到输出主题。

我在这里做错了什么?以下是我正在运行的主要方法:

    public static void main(String[] args) throws Exception {
    Properties props = new Properties();
    props.put(StreamsConfig.APPLICATION_ID_CONFIG, "streams-wordcount");
    props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
    props.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);
    props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
    props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
    props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");

    final StreamsBuilder builder = new StreamsBuilder();



    KStream<String, String> source = builder.stream("wc-input");

    @SuppressWarnings("deprecation")
    KTable<Windowed<String>, Long> counts = source
            .flatMapValues(new ValueMapper<String, Iterable<String>>() {
                @Override
                public Iterable<String> apply(String value) {
                    return Arrays.asList(value.toLowerCase(Locale.getDefault()).split(" "));
                }
            })
            .groupBy(new KeyValueMapper<String, String, String>() {
                @Override
                public String apply(String key, String value) {
                    return value;
                }
            })
            .count(TimeWindows.of(10000L)
                    .until(10000L),"Counts");

    // need to override value serde to Long type
    counts.to("wc-output");

    final Topology topology = builder.build();
    final KafkaStreams streams = new KafkaStreams(topology, props);
    final CountDownLatch latch = new CountDownLatch(1);

    // attach shutdown handler to catch control-c
    Runtime.getRuntime().addShutdownHook(new Thread("streams-wordcount-shutdown-hook") {
        @Override
        public void run() {
            streams.close();
            latch.countDown();
        }
    });

    try {

        streams.start();
        long windowSizeMs = TimeUnit.MINUTES.toMillis(50000); // 5 * 60 * 1000L
        TimeWindows.of(windowSizeMs);
        TimeWindows.of(windowSizeMs).advanceBy(windowSizeMs);

        latch.await();
    } catch (Throwable e) {
        System.exit(1);
    }
    System.exit(0);
}

暂时还没有答案

 类似资料:
  • 问题内容: 假设我有这个模型: 现在,如果我想高效地查看相册中的一部分照片。我这样做是这样的: 这只会执行两个查询,这正是我所期望的(一个查询得到相册,然后一个查询,例如“ SELECT * IN photos WHERE photoalbum_id IN()”。 一切都很棒。 但是,如果我这样做: 然后用!进行大量查询!我是在做错什么,还是django不够聪明,以至于它已经获取了所有照片并可以在

  • https://godbolt.org/z/P97MaK 我玩的概念和预期d::is_equality_comparable工作矢量,但它没有。 编译错误在 内部失败,而不是在受概念保护的函数边界处失败。 这是错误还是预期行为?

  • 问题内容: 我读苹果文档 ,当我发现这句话: 本类仅包含一个属性:。 此属性存储对应用程序窗口的引用。此窗口表示应用程序视图层次结构的根。这 是绘制所有应用程序内容的地方。请注意,window属性是 可选的 ,这意味着 在某些时候它可能没有任何值(为nil ) 。 我不明白的是:为什么此属性有时可能为零? 变成零的情况是什么? 问题答案: 当您关闭应用程序时,您的应用程序仍可以接收静默通知 或在后

  • 问题内容: 例如,当我们向窗格添加新按钮时,我们需要编写以下代码: 为什么我们需要调用“ getChildren()”?它甚至做什么?我们为什么不能说: 我们将按钮添加到窗格中。我们不会将其添加到其子项中, 问题答案: 简短的答案就是“您必须那样做,因为这就是API的编写方式”。当然,您可能真正要问的是为什么要这样编写API。我认为这实际上是两个(相关的)问题。一种与方法名称有关,以及该方法的作用

  • 问题内容: 我是一个初学者,我无法理解界面的实际效果。 问题答案: 除了Jeremy所说的以外,它的主要好处是它具有自己的语法糖:增强的for- loop 。如果您有个,则可以执行以下操作: 很好很容易,不是吗?编译器会在后台处理创建,检查它和调用的所有肮脏工作。 而且由于大多数集合都实现了或具有返回一个视图的视图(例如的或),所以这使使用集合更加容易。 该的Javadoc给出了实现类的完整列表。

  • 我在更新链式lodash操作时遇到了这个问题,我不明白为什么会有不同的效果 我把范围缩小到用链子把一根forEach拴在一个lodash包装纸上 https://jsbin.com/wahokezeja/edit?js,控制台 这将抛出一个错误: “TypeError:\(…)。forEach(…)。groupBy不是一个函数 但是,当使用贴图链接时,效果很好 https://jsbin.com/