[ 
https://issues.apache.org/jira/browse/KAFKA-1827?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jay Kreps resolved KAFKA-1827.
------------------------------
    Resolution: Won't Fix

Yeah this is interesting but currently out of scope.

> Optimistic Locking when Producing Messages
> ------------------------------------------
>
>                 Key: KAFKA-1827
>                 URL: https://issues.apache.org/jira/browse/KAFKA-1827
>             Project: Kafka
>          Issue Type: Improvement
>            Reporter: Daniel Schierbeck
>
> (I wasn't able to post to the ML, so I'm adding an issue instead. I hope 
> that's okay.)
> I'm trying to design a system that uses Kafka as its primary data store by 
> persisting immutable events into a topic and keeping a secondary index in 
> another data store. The secondary index would store the "entities". Each 
> event would pertain to some "entity", e.g. a user, and those entities are 
> stored in an easily queriable way.
> Kafka seems well suited for this, but there's one thing I'm having problems 
> with. I cannot guarantee that only one process writes events about an entity, 
> which makes the design vulnerable to integrity issues.
> For example, say that a user can have multiple email addresses assigned, and 
> the EmailAddressRemoved event is published when the user removes one. There's 
> an integrity constraint, though: every user MUST have at least one email 
> address. As far as I can see, there's no way to stop two separate processes 
> from looking up a user entity, seeing that there are two email addresses 
> assigned, and each publish an event. The end result would violate the 
> contraint.
> If I'm wrong in saying that this isn't possible I'd love some feedback!
> My current thinking is that Kafka could relatively easily support this kind 
> of application with a small additional API. Kafka already has the abstract 
> notion of entities through its key-based retention policy. If the produce API 
> was modified in order to allow an integer OffsetConstraint, the following 
> algorithm could determine whether the request should proceed:
> 1. For every key seen, keep track of the offset of the latest message 
> referencing the key.
> 2. When an OffsetContraint is specified in the produce API call, compare that 
> value with the latest offset for the message key.
> 2.1. If they're identical, allow the operation to continue.
> 2.2. If they're not identical, fail with some OptimisticLockingFailure.
> Would such a feature be completely out of scope for Kafka?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to