2017-09-07 44 views
0

我正試圖創建一個簡單的應用程序,它向我的網站上的每個網頁的頁面視圖寫入Cassandra。我想從邏輯小時開始每5分鐘寫一次累積頁面瀏覽量。使用我自己的Cassandra驅動程序編寫聚合結果

我給這家代碼看起來是這樣的:

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

哪裏還通過設置COMMIT_INTERVAL_MS_CONFIG屬性設置我的承諾間隔爲5分鐘。據我的理解,應該每隔5分鐘累計一小時並輸出中間累積狀態。

我現在的問題有兩個:

  1. 考慮到我有我自己的卡桑德拉司機,我怎麼寫聚集卡桑德拉的5分鐘,中間結果?試圖使用foreach,但這似乎並不奏效。

  2. 我只需要在聚集5分鐘後寫入,而不是每次更新。可能嗎?讀here暗示它可能不會使用低級API,我試圖避免它,因爲它似乎是一個足夠簡單的任務與更高級別的API完成。

回答

1

在Kafka Streams API中,提交和生成/寫入輸出是兩個不同的概念。在Kafka Streams API中,輸出是連續生成的,並且提交用於「標記進度」(即提交消費者偏移,包括沖刷所有商店和緩衝的生產者記錄)。

你可能想看看這篇博客瞭解更多詳情:https://www.confluent.io/blog/watermarks-tables-event-time-dataflow-model/

1)要寫入卡桑德拉,建議您申請的結果寫回到一個主題(通過#to("topic-name")),並使用Kafka Connect to get the data into Casandra

比較:External system queries during Kafka Stream processing

2)使用低級API是唯一的出路(正如你所指出的話),如果你想有嚴格的5分鐘的間隔。請注意,下一個版本(卡夫卡1.0)將包含掛鐘時間標點符號,以便您更輕鬆地實現目標。

+0

嗨,感謝您的評論。我會用卡夫卡連接,但我需要一些監視(計數,定時器),並且爲了我的理解,我需要編寫自己的連接器來實​​現這一點。 – idoda

相關問題