apache / apache/eventmesh

[Question] Why eventmesh re-write RocketMQ's consume serivce and use a global thread pool to consume all messages?

Open
#1,376 3 comments 0 reactions 0 assignees View on GitHub
question Stale
Dominant language
Java
Stars
1.8k
Forks
658
Avg merge
11h 29m
Merged PRs (30d)
52

Description

### Search before asking

- [X] I had searched in the [issues](https://github.com/apache/eventmesh/issues?q=is%3Aissue) and found no similar issues.

### Question

I'm new to Eventmesh, after reading some source code of Eventmesh, I have some questions.

Eventmesh re-write RocketMQ's `ConsumeMessageConcurrentlyService` to implement async offset commitment, and using a global thread pool `EventMeshHTTPServer.pushMsgExecutor` to process all HTTP push requests. Besides, Eventmesh implement it's own retry logic using Java's `DelayQueue`.

1. Why not use RocketMQ consumer's consume thread pool to process HTTP push requests? Global thread pool may be busy when some of the HTTP targets are unreachable, and will stuck all HTTP push requests
2. Is it profitable to choose async offset commit from RocketMQ's original offset commit mechanism?
3. Why not use RocketMQ's consumer retry mechanism?

Contributor guide

Open the contributing guide

Research direction

Start by reading the EventMesh implementation of ConsumeMessageConcurrentlyService, EventMeshHTTPServer.pushMsgExecutor, and the DelayQueue-based retry logic mentioned in the issue. Compare these choices with the corresponding RocketMQ consumer mechanisms and document the rationale, trade-offs, and answers to the three questions.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, distributed-systems
Issue type
Documentation
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.