Comments (6)
You could use a channel to tell the main grouting about messages that have been completely processed.
However, you should be careful with asynchronously processing messages. Because not all messages will take equally long to process, a message with offset 3 could be done before a message with offset 2. What do you want to do in this case?
On Sep 29, 2016, at 4:52 AM, shiberiu [email protected] wrote:
Hi, thanks for sharing the great library!
I have a case as the following, the consumer consumes the message asynchronously, so the offset may not be committed serially. What is the best practice of handling offsets to guarantee the offset committing correctly?for {
select {
case m, ok := <- consumer.Messages():
if ok {
go func(m *sarama.ConsumerMessage) {
exportMessage := worker.Ingest(m)// TODO: Commit the processed offsets }(m) } } }
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub #106, or mute the thread https://github.com/notifications/unsubscribe-auth/AAA9_v8ciuq-LXc6LcuQymkBzUOClDudks5quyfQgaJpZM4KJhwO.
from kafka.
Thanks for quick reply.
I need to consume message at high concurrency, so I fork many goroutines to do that.
Due to avoid the risk of offset management of asynchronous consuming message, I figure out a more safer way: commit the offset immediately, and if fails to upload the message, save it for re-consume.
for {
select {
case m, ok := <- consumer.Messages():
if ok {
if err := consumer.CommitUpto(m); err == nil {
go func(m *sarama.ConsumerMessage) {
exportMessage := worker.Ingest(m)
// TODO: Uploads the consumed message. If fails to upload, saves the message for re-consume.
}(m)
}
}
}
}
Is this a possible solution?
from kafka.
The standard solution to consume faster is by having more partitions and more consumer instances.
If you can get that to work, that would be by far my preferred solution because you can let go of all the complexity, and you get to keep all the guarantees Kafka offers.
If that doesn’t work for you, it really depends on what kind of guarantees your application need.
Saving failed messages for re-consume could work, but it really depends on your application.
You will lose the ordering guarantee with this approach, for instance.
Willem
On Sep 29, 2016, at 8:47 AM, shiberiu [email protected] wrote:
Thanks for quick reply.
I need to consume message at high concurrency, so I fork many goroutines to do that.
Due to avoid the risk of offset management of asynchronous consuming message, I figure out a more safer way: commit the offset immediately, and if fails to upload the message, save it for re-consume.
for { select { case m, ok := <- consumer.Messages(): if ok { if err := consumer.CommitUpto(m); err == nil { go func(m *sarama.ConsumerMessage) { exportMessage := worker.Ingest(m) // TODO: Uploads the consumed message. If fails to upload, saves the message for re-consume. }(m) } } } }
Is this a possible solution?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub #106 (comment), or mute the thread https://github.com/notifications/unsubscribe-auth/AAA9_lIjCGHA0IwWMK_gYFvbVaSQhGsCks5qu18LgaJpZM4KJhwO.
from kafka.
Yes, that may be a better approach. More standard and less complexity.
Assumes that there are 2 partitions in topic1, would it look like the following?
consumer1, consumerErr1 := consumergroup.JoinConsumerGroup("main-group", []string{"topic1"}, zookeeperNodes, kafkaConfig)
consumer2, consumerErr2 := consumergroup.JoinConsumerGroup("main-group", []string{"topic1"}, zookeeperNodes, kafkaConfig)
go func() {
for {
select {
case consumer1.Messages():
// Process message...
}
}
}()
go func() {
for {
select {
case consumer2.Messages():
// Process message...
}
}
}()
// ......
from kafka.
No, you just call JoinConsumerGroup
once. Then, you simply start the application several times simultaneously. Added benefit of this is that you can do this on multiple servers.
from kafka.
Cleared. Thank you!
from kafka.
Related Issues (20)
- zk: node does not exist HOT 1
- Is There Any Benchmark for the Consumer? HOT 1
- Lots of logs such as "abandoned subscription to xxx because consuming was taking too long" HOT 1
- Bug? Consuming stops or hangs at certain time.
- ConsumerGroup.Messages() HOT 3
- How to exit the program in kafka/examples/consumergroup/main.go gracefully? HOT 1
- Clarify Kafka version support HOT 3
- consumption message delay
- consumergroup not work in docker HOT 1
- Consumer group not consuming from partitions -- Kafka v11
- Some problems when I try to run my consumer in two node. HOT 3
- Trouble reliably reusing consumer group names across topics HOT 1
- Upgrading to kafka based offset storage HOT 1
- Kafka consumer not restarting after broker failure
- Leader change during re-balance may cause partition not being consumed HOT 4
- Can't receive messages when i test the demo which the project gives. HOT 4
- ConsumerGroup.FlushOffsets() HOT 3
- Version releases? HOT 2
- which tag or version support kafka 0.8 ?
- Is there any way to get to the ConsumerGroup. Instance. ID?
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 kafka.