【发布时间】:2018-05-22 16:44:12
【问题描述】:
这个问题是关于在 Kafka Streams 应用程序中实现 GDPR 的,其中包含使用处理器 API 进行状态处理的完整保留主题。
假设应用程序接收事件。有不同的客户端,客户端有用户,这些用户对“事件”主题产生事件。
为了允许“遗忘权”,您必须能够根据需要删除(clientId,userId)对的数据,而不仅仅是基于保留删除。您可以通过“紧凑”策略来获得它。
如果我(就像我在非压缩主题中所做的那样)将键保留为 (clientId, userId),压缩会将所有 (clientId, userId) 记录减少到一个,显然不是我想要的。
我知道我可以有一个这样的记录键:(clientId, userId, eventId) 和一个使用 (clientId, userId) % numPartitions 的分区器,为了从用户中删除记录,我可以通过阅读来做到这一点从一开始,使用 (clientId, userId) 过滤这些记录,它们将在同一个分区中,然后在那里添加一个 ( (clientId, userId, eventId) -> null ) 记录。
但是,这样做,我需要关联的状态存储来保持与源主题相同的分区,即(clientId,userId),但不是相同的键。这可行吗?
如何从状态存储主题中删除?对处理器代码中的“null”值做出反应非常麻烦(因为您的数据来自 (clientId, userId),而不是 (clientId, userId, eventId))。
参考一般 GDPR on Kafka,请不要包含基于加密的解决方案,如 Daniel Lebrero's - 不过很有见地。
【问题讨论】:
标签: apache-kafka streaming partitioning apache-kafka-streams