Как реализовать GDPR «забыть (удалить)» в Kafka Streams с магазинами и процессором API? - PullRequest
0 голосов
/ 22 мая 2018

Этот вопрос касается внедрения GDPR в приложении Kafka Streams, с полной темой хранения с обработкой с сохранением состояния с использованием Processor API.

Скажем, приложение получает события.Существуют разные клиенты, и у клиентов есть пользователи, и эти пользователи создают события в теме «событий».

Чтобы разрешить «право на забвение», необходимо иметь возможность удалять данные по запросу для (clientId, userId), а не просто удалить на основе сохранения.Вы можете иметь это по "компактной" политике.

Если я сохраню (как я делал в некомпактированной теме) ключ как (clientId, userId), сжатие сократит все записи (clientId, userId) до одной, что явно не то, что я хочу.

Я понимаю, что у меня может быть такой ключ записи: (clientId, userId, eventId) и Partitioner, который использует (clientId, userId)% numPartitions, и для удаления записей от пользователя я могу сделатьэто путем чтения с начала, фильтрации этих записей с помощью (clientId, userId), который будет находиться в том же разделе, и добавления туда записи ((clientId, userId, eventId) -> null).

НоДля этого нужно, чтобы хранилища состояний были связаны с тем же разделением, что и исходная тема, т. е. (clientId, userId), но не с тем же ключом.Это было бы возможно?

Как удалить из тем государственного магазина?Реакция на «нулевое» значение в коде вашего процессора довольно громоздка (поскольку у вас есть данные по (clientId, userId), а не (clientId, userId, eventId)).


Ссылка на общие сведения GDPR на Kafka и, пожалуйста, не включайте решения на основе шифрования, такие как Даниэля Лебреро - хотя и проницательные.

1 Ответ

0 голосов
/ 22 мая 2018

Но, делая это таким образом, мне нужно, чтобы хранилища состояний были связаны с тем же разделением, что и исходная тема, т. Е. (ClientId, userId), но не с тем же ключом.Это было бы возможно?

Да.Если входной темой являются разделы по (clientId, userId), хранилища будут разделены одинаково.Если вы перераспределяете данные в своем приложении, вы можете передать пользовательскую StreamPartitioner для сохранения схемы разбиения (clientId, userId).

Как удалить из тем хранилища состояний?Реакция на нулевое значение в коде вашего процессора довольно громоздка (поскольку у вас есть данные по (clientId, userId), а не (clientId, userId, eventId)).

Не знаю, почему это будетбыть громоздким?Даже если входная тема разделена на (clientId, userId), ключ остается (clientId, userId, eventId) и полный ключ используется в хранилище.

...