在Kafka-Spark Streaming中提取唯一记录

时间:2018-11-08 19:26:32

标签: scala cassandra apache-kafka spark-streaming

我有一个Kafka主题,该主题每分钟获取10K个事件,并编写了一个Scala中的Spark Streaming 2.3消费者,用于接收和摄取Cassandra。传入事件是具有“ userid”字段的JSON。但是,如果再次出现具有相同userid的事件(即使具有不同的消息正文),我仍然不希望将其吸收到Cassandra中。 Cassandra表每天每时每刻都在增长,因此通过将表检索到内存中的Spark数据帧中来查找直到此时为止遇到的所有用户ID都是不可能的,因为该表将变得越来越大。如何最好地仅提取唯一记录?

updateStateByKey可以工作吗?状态可以维持多长时间?因为如果一年后使用相同的用户名,我不想将其提取到Cassandra中。

1 个答案:

答案 0 :(得分:0)

使用像Aerospike这样的外部低延迟外部DB,或者如果重复率很低,则可以使用内存中的布满/布谷鸟过滤器(1年约4GB,每分钟10K的速率),并通过以下方式重新检查匹配项: Cassandra在出现误报的情况下不会丢弃事件。