Counting views/impressions in combination with Apache Kafka sounds like the ideal use case for a stream processor like Apache Flink. It supports very large state which can be managed off-hand. This should enable you to count the exact number of unique views in real time with exactly once semantics. Here is a blog post on large scale counting with more details. It also includes a comparison with other streaming technologies like Sanza and Spark: https://data-artisans.com/blog/counting-in-streams-a-hierarc...
* Apache Flink
Sophisticated stream processing framework with focus on robustness (managed memory) and correctness (exactly-once semantics)
* Apache Flume
Tailored towards log data.
* Apache Storm
First stream processing framework. Legacy.
* Apache Samza
Only used at LinkedIn. Tight to Hadoop's YARN.
* Apache Spark
Only great in batch processing.
* Apache Apex
Dead project. Tight to Hadoop's YARN.
* Apache Kafka
A distributed message queue with simple stream processing built on top via the Confluent Platform.