1. 基于状态后端。
2. 基于 HyperLogLog:不是精准的去重。
3. 基于布隆过滤器(BloomFilter);快速判断一个 key 是否存在于某容器, 不存在就直接返回。
4. 基于 BitMap;用一个 bit 位来标记某个元素对应的 Value,而 Key 即是该元素。由于采用了 Bit 为单位来存储数据,因此可以大大节省存储空间。
5. 基于外部数据库;选择使用 Redis 或者 HBase 存储数据,我们只需要设计好存储的 Key 即可,不需要关心 Flink 任务重启造成的状态丢失问题。