Comments (4)
If I'm reading this right, you'd like to build / destroy state in OnAssigned
and OnRevoked
, but building / destroying may return an error?
I think I'd try retrying on error within OnAssigned
and OnRevoked
, and if you reach a critical error, LeaveGroup
. If either of your hooks take too long, the client will be forced from the group by Kafka as it is.
I'm not sure I fully understand the goal here, though?
from franz-go.
Yes you perfectly understood it :) I will try to clarify my use case a bit more precisely.
The goal might be for example a transactional counter, where you have a stateful compacted topic (containing the total count per partition) and stetaless topic (containing each event to count per partition).
On assignment, we bootstrap the state by reading the compacted topic to get the current total per partition (by kafka key) and then continue reading from the events topic (kafka streams-ish).
On a large number of counters, we would prefer using disk for storing states and this can cause errors (even consumption of the compacted topic can cause errors). Maybe, on such errors, it is arguable that we can consider this an unrecoverable error and to LeaveGroup
or to panic
after a number of retries.
from franz-go.
I think I can see a few potential ways of doing things.
If OnAssigned takes too long, then the client is booted from the group from Kafka. When you finally finish OnAssigned, you will immediately proceed to OnRevoked, and then once that finishes, the client will retry joining the group. So, if you are fine with potentially causing rebalances when OnAssign/OnRevoke takes too long, that's one option.
If you have an unrecoverable error in either OnAssigned or OnRevoked, then leaving the group is the best bet, because it doesn't make sense to rejoin the group.
If you want to stop progress in OnAssigned/OnRevoked if the member is booted (so, you're taking too long and then the client is kicked from the group), that's not currently possible. The context passed to the callbacks is the context for the group member itself, not for the session it is in. I can look into potentially changing this down the line if that would help.
But, if you have an error in the callback, I can't think of a solid thing to do when the callback returns if it was able to return an error. The only two options for the client itself are to leave the group or to continue within the group, and you can ensure that behavior manually by either calling LeaveGroup or not?
from franz-go.
Alright, thank you very much for your propositions. I'll give it a shot.
from franz-go.
Related Issues (20)
- How consume again uncommitted message from kafka partition in same connection HOT 4
- Producer config, MaxBufferedBytes, MaxBufferedRecords HOT 3
- Data Race HOT 7
- Commit behaviour when using kgo.DisableAutoCommit() HOT 6
- INVALID_TXN_STATE while producing in transaction from new version of library HOT 5
- fetchMetadata causing issues when running kafka in docker during dev HOT 4
- Question: best practice when consuming from multiple topics HOT 2
- TransactionalID Partition Suffix HOT 6
- Another kafka NullPointerException on fetch HOT 2
- Feature request: KIP-842 HOT 1
- lz4 decompression causes a lot of allocations due to ioutil.ReadAll HOT 7
- Kotel consumer not setting trace id correctly. HOT 4
- "default commit failed" logs contain no error HOT 4
- Custom number of acks HOT 2
- How to handle TLS certificate renewals from client HOT 3
- Option to set group.instance.id HOT 4
- Question on serde for Protobuf HOT 5
- Allow rebalance question with manual commits HOT 1
- Support for ACL requests in kfake package
- v1.16 release status
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from franz-go.