如何在Kafka Streams中使用商店和处理器API实现GDPR右键忘记(删除)?

时间:2018-05-22 16:44:12

标签: apache-kafka streaming partitioning apache-kafka-streams

这个问题是关于在Kafka Streams应用程序中实现GDPR,其中包含使用Processor API进行状态处理的完整保留主题。

说一个应用程序接收事件。有不同的客户,客户有用户,这些用户为"事件"主题。

为了允许"权利忘记",您必须能够按需删除(clientId,userId)对的数据,而不仅仅是基于保留删除。你可以通过" compact"政策。

如果我保持(就像我在非压缩主题中所做的那样)密钥为(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等基于加密的解决方案 - 尽管有见地。

1 个答案:

答案 0 :(得分:0)

  

但是,这样做,我需要关联的状态存储保持与源主题相同的分区,即(clientId,userId),但不是相同的密钥。这可行吗?

是。如果输入主题是(clientId,userId)的分区,则将以相同的方式对存储进行分区。如果您在应用中重新分区数据,则可以传递自定义StreamPartitioner以保留(clientId,userId)分区方案。

  

如何从州商店主题中删除?对处理器代码中的“null”值做出反应非常麻烦(因为你有(clientId,userId)数据,而不是(clientId,userId,eventId))。

不确定为什么这会很麻烦?即使输入主题由(clientId,userId)分区,密钥仍然是(clientId,userId,eventId),并且在商店中使用完整密钥。