admin functionality refactoring
Admin functionality in 0.8 is kind of messy. What should we do?
There are a bunch of misc. command line tools under kafka.admin. AdminUtils
is the closest thing we have to an admin interface, but it is weirdly
implemented as all static methods. Furthermore its APIs are really wonky
and tend to describe the operation they perform in zookeeper rather than
the high-level thing they accomplish.
Since people are going to want programmatic access to administrative
functionality it would be good to think this through a bit. The least we
could do would be to refactor AdminUtils into an Admin class and think
through those APIs enough to make them usable from java/scala. This would
mean having a clear API for each thing that the various tools currently do
(create/delete/alter/describe/list topics, migrate partitions, shutdown
Arguably some of these should really be RPC apis so other languages can
invoke basic operations like creating and deleting topics. But this is not
critical so we can probably do it later.
I think it would be good to also think about how we ended up here. I think
we are not putting in place basic APIs that provide a layer of
simplification for common operations. Instead we tend to just be jabbing
directly at Zookeeper from different places using ad hoc methods in
ZkUtils. This is really hard to understand or change. In general we seem to
have trouble thinking through APIs.