[
https://issues.apache.org/jira/browse/KAFKA-1912?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14365766#comment-14365766
]
Jay Kreps commented on KAFKA-1912:
----------------------------------
I think this is easier than I thought.
We have an async api now in NetworkClient:
send(ClientRequest request)
So re-routing is fairly straight-forward:
reroutedRequest = new RequestSend(newDestinationNode, originalRequest.header,
originalRequest.body);
networkClient.send(new ClientRequest(time, true, reroutedRequest,
new RequestCompletionHandler() {
public void onComplete(ClientResponse response) {
responseQueue.add(response);
}
}
));
The only issue with this is that the network client currently requires a ready
connection to do a send. I think we can fix this by making a small
RequestRerouter shim that has a queue of unsent messages and a thread that does
the ready check and send. Hopefully that makes sense, if not I can flesh it out
a bit more.
> Create a simple request re-routing facility
> -------------------------------------------
>
> Key: KAFKA-1912
> URL: https://issues.apache.org/jira/browse/KAFKA-1912
> Project: Kafka
> Issue Type: Improvement
> Reporter: Jay Kreps
> Fix For: 0.8.3
>
>
> We are accumulating a lot of requests that have to be directed to the correct
> server. This makes sense for high volume produce or fetch requests. But it is
> silly to put the extra burden on the client for the many miscellaneous
> requests such as fetching or committing offsets and so on.
> This adds a ton of practical complexity to the clients with little or no
> payoff in performance.
> We should add a generic request-type agnostic re-routing facility on the
> server. This would allow any server to accept a request and forward it to the
> correct destination, proxying the response back to the user. Naturally it
> needs to do this without blocking the thread.
> The result is that a client implementation can choose to be optimally
> efficient and manage a local cache of cluster state and attempt to always
> direct its requests to the proper server OR it can choose simplicity and just
> send things all to a single host and let that host figure out where to
> forward it.
> I actually think we should implement this more or less across the board, but
> some requests such as produce and fetch require more logic to proxy since
> they have to be scattered out to multiple servers and gathered back to create
> the response. So these could be done in a second phase.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)