使用我自己的Cassandra驱动程序编写聚合结果

时间:2017-09-07 22:54:37

标签: apache-kafka-streams

我正在尝试创建一个简单的应用程序,该应用程序向Cassandra写入我网站上每个网页的页面浏览量。我想从逻辑小时开始每5分钟写一次累积页面视图。

我的代码看起来像这样:

KTable<Windowed<String>, Long> hourlyPageViewsCounts = keyedPageViews
            .groupByKey()
            .count(TimeWindows.of(TimeUnit.MINUTES.toMillis(60)), "HourlyPageViewsAgg")

我还通过设置COMMIT_INTERVAL_MS_CONFIG属性将我的提交间隔设置为5分钟。根据我的理解,应该每隔5分钟汇总一小时并输出中间积累状态。

我现在的问题是两个:

  1. 鉴于我有自己的Cassandra驱动程序,如何将聚合的5分钟中间结果写入Cassandra?试图使用foreach但这似乎不起作用。

  2. 我只需要在聚合5分钟后进行写入,而不是每次更新。可能吗?阅读here表明,如果不使用低级API,我可能会尝试避免这种情况,因为使用更高级别的API似乎可以完成一项简单的任务。

1 个答案:

答案 0 :(得分:1)

提交和生成/编写输出是Kafka Streams API中的两个不同概念。在Kafka Streams API中,输出是连续生成的,并且提交用于“标记进度”(即,提交消费者偏移,包括刷新所有商店和缓冲的生产者记录)。

您可以查看此博文,了解更多详情:https://www.confluent.io/blog/watermarks-tables-event-time-dataflow-model/

1)要写入Casandra,建议将应用程序的结果写回主题(通过#to("topic-name"))并使用Kafka Connect to get the data into Casandra

比较:External system queries during Kafka Stream processing

2)如果你想拥有严格的5分钟间隔,那么使用低级API是唯一的方法(正如你已经指出的那样)。请注意,下一个版本(Kafka 1.0)将包含挂钟时间标点符号,这样可以让您更轻松地实现目标。