【问题标题】:Ingesting unique records in Kafka-Spark Streaming在 Kafka-Spark Streaming 中提取唯一记录
【发布时间】:2019-04-12 09:05:44
【问题描述】:

我有一个 Kafka 主题,每分钟有 10K 个事件,还有一个 Spark Streaming 2.3 消费者,在 scala 中编写用于接收和摄取到 Cassandra。传入事件是具有“用户 ID”字段的 JSON。但是,如果再次出现具有相同用户 ID 的事件(即使消息正文不同),我仍然不希望将其引入 Cassandra。 Cassandra 表每分钟和每天都在增长,因此通过将表检索到内存中的 spark 数据帧中来查找到目前为止遇到的所有用户 ID 是不可能的,因为表会变得很大。我怎样才能最好地只摄取独特的记录?

updateStateByKey 可以工作吗?状态可以维持多久?因为如果一年后出现相同的用户 ID,我不想将其引入 Cassandra。

【问题讨论】:

    标签: scala cassandra apache-kafka spark-streaming


    【解决方案1】:

    使用像 Aerospike 这样的外部低延迟外部数据库,或者如果重复率很低,您可以使用内存中的布隆/布谷鸟过滤器(即 1 年约 4GB,每分钟 10K 的速率)通过重新检查匹配Cassandra 在出现误报时不要丢弃事件。

    【讨论】:

    • 布隆过滤器是否会包含迄今为止看到的所有用户 ID?因此,随着每个流式传输间隔,bloomfilter 会不断增加以将遇到的新 id 添加到自身?
    猜你喜欢
    • 2018-01-17
    • 1970-01-01
    • 2017-04-11
    • 2019-08-08
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2016-03-12
    相关资源
    最近更新 更多