Flavio Junqueira created KAFKA-3210:
---------------------------------------
Summary: Using asynchronous calls through the raw ZK API in ZkUtils
Key: KAFKA-3210
URL: https://issues.apache.org/jira/browse/KAFKA-3210
Project: Kafka
Issue Type: Improvement
Components: controller, zkclient
Affects Versions: 0.9.0.0
Reporter: Flavio Junqueira
Assignee: Neha Narkhede
We have observed a number of issues with the controller interaction with
ZooKeeper mainly because ZkClient creates new sessions transparently under the
hood. Creating sessions transparently enables, for example, old controller to
successfully update znodes in ZooKeeper even when they aren't the controller
any longer (e.g., KAFKA-3083). To fix this, we need to bypass the ZkClient lib
like we did with ZKWatchedEphemeral.
In addition to fixing such races with the controller, it would improve
performance significantly if we used the async API (see KAFKA-3038). The async
API is more efficient because it pipelines the requests to ZooKeeper, and the
number of requests upon controller recovery can be large.
This jira proposes to make these two changes to the calls in ZkUtils and to do
it, one path is to first replace the calls in ZkUtils with raw async ZK calls
and block so that we don't have to change the controller code in this phase.
Once this step is accomplished and it is stable, we make changes to the
controller to handle the asynchronous calls to ZooKeeper.
Note that in the first step, we will need to introduce some logic for session
management, which is currently handled entirely by ZkClient.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)