Hi Andrew, Thank you for the clarification. One follow-up to read_committed mode: Taking the change in message ordering guarantees into account, does this mean that in queues, share-group consumers will be able to consume committed records AFTER the LSO? Thanks, Daniel
Andrew Schofield <andrew_schofield_j...@outlook.com> ezt írta (időpont: 2023. jún. 2., P, 10:39): > Hi Daniel, > Thanks for your questions. > > 1) Yes, read_committed fetch will still be possible. > > 2) You weren’t wrong that this is a broad question :) > > Broadly speaking, I can see two ways of managing the in-flight records: > the share-partition leader does it, or the share-group coordinator does it. > I want to choose what works best, and I happen to have started with trying > the share-partition leader doing it. This is just a whiteboard exercise at > the > moment, looking at the potential protocol flows and how well it all hangs > together. When I have something coherent and understandable and worth > reviewing, I’ll update the KIP with a proposal. > > I think it’s probably worth doing a similar exercise for the share-group > coordinator way too. There are bound to be pros and cons, and I don’t > really > mind which way prevails. > > If the share-group coordinator does it, I already have experience of > efficient > storage of in-flight record state in a way that scales and is > space-efficient. > If the share-partition leader does it, storage of in-flight state is a bit > more > tricky. > > I think it’s worth thinking ahead to how EOS will work and also another > couple of enhancements (key-based ordering and acquisition lock > extension) so it’s somewhat future-proof. > > Thanks, > Andrew > > > On 1 Jun 2023, at 11:51, Dániel Urbán <urb.dani...@gmail.com> wrote: > > > > Hi Andrew, > > > > Thank you for the KIP, exciting work you are doing :) > > I have 2 questions: > > 1. I understand that EOS won't be supported for share-groups (yet), but > > read_committed fetch will still be possible, correct? > > > > 2. I have a very broad question about the proposed solution: why not let > > the share-group coordinator manage the states of the in-flight records? > > I'm asking this because it seems to me that using the same pattern as the > > existing group coordinator would > > a, solve the durability of the message state storage (same method as the > > one used by the current group coordinator) > > > > b, pave the way for EOS with share-groups (same method as the one used by > > the current group coordinator) > > > > c, allow follower-fetching > > I saw your point about this: "FFF gives freedom to fetch records from a > > nearby broker, but it does not also give the ability to commit offsets > to a > > nearby broker" > > But does it matter if message acknowledgement is not "local"? Supposedly, > > fetching is the actual hard work which benefits from follower fetching, > not > > the group related requests. > > > > The only problem I see with the share-group coordinator managing the > > in-flight message state is that the coordinator is not aware of the exact > > available offsets of a partition, nor how the messages are batched. For > > this problem, maybe the share group coordinator could use some form of > > "logical" addresses, such as "the next 2 batches after offset X", or > "after > > offset X, skip 2 batches, fetch next 2". Acknowledgements always contain > > the exact offset, but for the "unknown" sections of a partition, these > > logical addresses would be used. The coordinator could keep track of > > message states with a mix of offsets and these batch based addresses. The > > partition leader could support "skip X, fetch Y batches" fetch requests. > > This solution would need changes in the Fetch API to allow such batch > based > > addresses, but I assume that fetch protocol changes will be needed > > regardless of the specific solution. > > > > Thanks, > > Daniel > > > > Andrew Schofield <andrew_schofi...@live.com> ezt írta (időpont: 2023. > máj. > > 30., K, 18:15): > > > >> Yes, that’s it. I imagine something similar to KIP-848 for managing the > >> share group > >> membership, and consumers that fetch records from their assigned > >> partitions and > >> acknowledge when delivery completes. > >> > >> Thanks, > >> Andrew > >> > >>> On 30 May 2023, at 16:52, Adam Warski <a...@warski.org> wrote: > >>> > >>> Thanks for the explanation! > >>> > >>> So effectively, a share group is subscribed to each partition - but the > >> data is not pushed to the consumer, but only sent on demand. And when > >> demand is signalled, a batch of messages is sent? > >>> Hence it would be up to the consumer to prefetch a sufficient number of > >> batches to ensure, that it will never be "bored"? > >>> > >>> Adam > >>> > >>>> On 30 May 2023, at 15:25, Andrew Schofield <andrew_schofi...@live.com > > > >> wrote: > >>>> > >>>> Hi Adam, > >>>> Thanks for your question. > >>>> > >>>> With a share group, each fetch is able to grab available records from > >> any partition. So, it alleviates > >>>> the “head-of-line” blocking problem where a slow consumer gets in the > >> way. There’s no actual > >>>> stealing from a slow consumer, but it can be overtaken and must > >> complete its processing within > >>>> the timeout. > >>>> > >>>> The way I see this working is that when a consumer joins a share > group, > >> it receives a set of > >>>> assigned share-partitions. To start with, every consumer will be > >> assigned all partitions. We > >>>> can be smarter than that, but I think that’s really a question of > >> writing a smarter assignor > >>>> just as has occurred over the years with consumer groups. > >>>> > >>>> Only a small proportion of Kafka workloads are super high throughput. > >> Share groups would > >>>> struggle with those I’m sure. Share groups do not diminish the value > of > >> consumer groups > >>>> for streaming. They just give another option for situations where a > >> different style of > >>>> consumption is more appropriate. > >>>> > >>>> Thanks, > >>>> Andrew > >>>> > >>>>> On 29 May 2023, at 17:18, Adam Warski <a...@warski.org> wrote: > >>>>> > >>>>> Hello, > >>>>> > >>>>> thank you for the proposal! A very interesting read. > >>>>> > >>>>> I do have one question, though. When you subscribe to a topic using > >> consumer groups, it might happen that one consumer has processed all > >> messages from its partitions, while another one still has a lot of work > to > >> do (this might be due to unbalanced partitioning, long processing times > >> etc.). In a message-queue approach, it would be great to solve this > problem > >> - so that a consumer that is free can steal work from other consumers. > Is > >> this somehow covered by share groups? > >>>>> > >>>>> Maybe this is planned as "further work", as indicated here: > >>>>> > >>>>> " > >>>>> It manages the topic-partition assignments for the share-group > >> members. An initial, trivial implementation would be to give each member > >> the list of all topic-partitions which matches its subscriptions and > then > >> use the pull-based protocol to fetch records from all partitions. A more > >> sophisticated implementation could use topic-partition load and lag > metrics > >> to distribute partitions among the consumers as a kind of autonomous, > >> self-balancing partition assignment, steering more consumers to busier > >> partitions, for example. Alternatively, a push-based fetching scheme > could > >> be used. Protocol details will follow later. > >>>>> " > >>>>> > >>>>> but I’m not sure if I understand this correctly. A fully-connected > >> graph seems like a lot of connections, and I’m not sure if this would > play > >> well with streaming. > >>>>> > >>>>> This also seems as one of the central problems - a key differentiator > >> between share and consumer groups (the other one being persisting state > of > >> messages). And maybe the exact way we’d want to approach this would, to > a > >> certain degree, dictate the design of the queueing system? > >>>>> > >>>>> Best, > >>>>> Adam Warski > >>>>> > >>>>> On 2023/05/15 11:55:14 Andrew Schofield wrote: > >>>>>> Hi, > >>>>>> I would like to start a discussion thread on KIP-932: Queues for > >> Kafka. This KIP proposes an alternative to consumer groups to enable > >> cooperative consumption by consumers without partition assignment. You > end > >> up with queue semantics on top of regular Kafka topics, with per-message > >> acknowledgement and automatic handling of messages which repeatedly > fail to > >> be processed. > >>>>>> > >>>>>> > >> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-932%3A+Queues+for+Kafka > >>>>>> > >>>>>> Please take a look and let me know what you think. > >>>>>> > >>>>>> Thanks. > >>>>>> Andrew > >>>>> > >>>> > >>> > >>> -- > >>> Adam Warski > >>> > >>> https://www.softwaremill.com/ > >>> https://twitter.com/adamwarski > > >