This raises one more concern. Just putting it out there. 4. What if one decides to move to a different zk, I am sure there are other concerns in status quo for this question. However, this is adding to the concern, right? Not sure though how much big of a concern it practically is.
On Wednesday, May 6, 2015, Ashish Singh <asi...@cloudera.com> wrote: > Hey Jun, > > Where does the broker get the info, which zk it needs to talk to? > > On Wednesday, May 6, 2015, Jun Rao <j...@confluent.io > <javascript:_e(%7B%7D,'cvml','j...@confluent.io');>> wrote: > >> Ashish, >> >> 3. Just want to clarify. Why can't you store ZK connection config in ZK? >> This is a property for ZK clients, not ZK server. >> >> Thanks, >> >> Jun >> >> On Wed, May 6, 2015 at 5:48 PM, Ashish Singh <asi...@cloudera.com> wrote: >> >> > I too would like to share some concerns that we came up with while >> > discussing the effect of moving configs to zookeeper will have. >> > >> > 1. Kafka will start to become a configuration management tool to some >> > degree, and be subject to all the things such tools are commonly asked >> to >> > do. Kafka'll likely need to re-implement the role / group / service >> > hierarchy that CM uses. Kafka'll need some way to conveniently dump its >> > configs so they can be re-imported later, as a backup tool. People will >> > want this to be audited, which means you'd need distinct logins for >> > different people, and user management. You can try to push some of this >> > stuff onto tools like CM, but this is Kafka going out of its way to be >> > difficult to manage, and most projects don't want to do that. Being >> unique >> > in how configuration is done is strictly a bad thing for both >> integration >> > and usability. Probably lots of other stuff. Seems like a bad direction. >> > >> > 2. Where would the default config live? If we decide on keeping the >> config >> > files around just for getting the default config, then I think on >> restart, >> > the config file will be ignored. This creates an obnoxious asymmetry for >> > how to configure Kafka the first time and how you update it. You have to >> > learn 2 ways of making config changes. If there was a mistake in your >> > original config file, you can't just edit the config file and restart, >> you >> > have to go through the API. Reading configs is also more irritating. >> This >> > all creates a learning curve for users of Kafka that will make it >> harder to >> > use than other projects. This is also a backwards-incompatible change. >> > >> > 3. All Kafka configs living in ZK is strictly impossible, since at the >> very >> > least ZK connection configs cannot be stored in ZK. So you will have a >> file >> > where some values are in effect but others are not, which is again >> > confusing. Also, since you are still reading the config file on first >> > start, there are still multiple sources of truth, or at least the >> > appearance of such to the user. >> > >> > On Wed, May 6, 2015 at 5:33 PM, Jun Rao <j...@confluent.io> wrote: >> > >> > > One of the Chef users confirmed that Chef integration could still >> work if >> > > all configs are moved to ZK. My rough understanding of how Chef works >> is >> > > that a user first registers a service host with a Chef server. After >> > that, >> > > a Chef client will be run on the service host. The user can then push >> > > config changes intended for a service/host to the Chef server. The >> server >> > > is then responsible for pushing the changes to Chef clients. Chef >> clients >> > > support pluggable logic. For example, it can generate a config file >> that >> > > Kafka broker will take. If we move all configs to ZK, we can customize >> > the >> > > Chef client to use our config CLI to make the config changes in >> Kafka. In >> > > this model, one probably doesn't need to register every broker in Chef >> > for >> > > the config push. Not sure if Puppet works in a similar way. >> > > >> > > Also for storing the configs, we probably can't store the >> broker/global >> > > level configs in Kafka itself (e.g. in a special topic). The reason is >> > that >> > > in order to start a broker, we likely need to make some broker level >> > config >> > > changes (e.g., the default log.dir may not be present, the default >> port >> > may >> > > not be available, etc). If we need a broker to be up to make those >> > changes, >> > > we get into this chicken and egg problem. >> > > >> > > Thanks, >> > > >> > > Jun >> > > >> > > On Tue, May 5, 2015 at 4:14 PM, Gwen Shapira <gshap...@cloudera.com> >> > > wrote: >> > > >> > > > Sorry I missed the call today :) >> > > > >> > > > I think an additional requirement would be: >> > > > Make sure that traditional deployment tools (Puppet, Chef, etc) are >> > still >> > > > capable of managing Kafka configuration. >> > > > >> > > > For this reason, I'd like the configuration refresh to be pretty >> close >> > to >> > > > what most Linux services are doing to force a reload of >> configuration. >> > > > AFAIK, this involves handling HUP signal in the main thread to >> reload >> > > > configuration. Then packaging scripts can add something nice like >> > > "service >> > > > kafka reload". >> > > > >> > > > (See Apache web server: >> > > > >> https://github.com/apache/httpd/blob/trunk/build/rpm/httpd.init#L101) >> > > > >> > > > Gwen >> > > > >> > > > >> > > > On Tue, May 5, 2015 at 8:54 AM, Joel Koshy <jjkosh...@gmail.com> >> > wrote: >> > > > >> > > > > Good discussion. Since we will be talking about this at 11am, I >> > wanted >> > > > > to organize these comments into requirements to see if we are all >> on >> > > > > the same page. >> > > > > >> > > > > REQUIREMENT 1: Needs to accept dynamic config changes. This needs >> to >> > > > > be general enough to work for all configs that we envision may >> need >> > to >> > > > > accept changes at runtime. e.g., log (topic), broker, client >> > (quotas), >> > > > > etc.. possible options include: >> > > > > - ZooKeeper watcher >> > > > > - Kafka topic >> > > > > - Direct RPC to controller (or config coordinator) >> > > > > >> > > > > The current KIP is really focused on REQUIREMENT 1 and I think >> that >> > is >> > > > > reasonable as long as we don't come up with something that >> requires >> > > > > significant re-engineering to support the other requirements. >> > > > > >> > > > > REQUIREMENT 2: Provide consistency of configs across brokers >> (modulo >> > > > > per-broker overrides) or at least be able to verify consistency. >> > What >> > > > > this effectively means is that config changes must be seen by all >> > > > > brokers eventually and we should be able to easily compare the >> full >> > > > > config of each broker. >> > > > > >> > > > > REQUIREMENT 3: Central config store. Needs to work with plain >> > > > > file-based configs and other systems (e.g., puppet). Ideally, >> should >> > > > > not bring in other dependencies (e.g., a DB). Possible options: >> > > > > - ZooKeeper >> > > > > - Kafka topic >> > > > > - other? E.g. making it pluggable? >> > > > > >> > > > > Any other requirements? >> > > > > >> > > > > Thanks, >> > > > > >> > > > > Joel >> > > > > >> > > > > On Tue, May 05, 2015 at 01:38:09AM +0000, Aditya Auradkar wrote: >> > > > > > Hey Neha, >> > > > > > >> > > > > > Thanks for the feedback. >> > > > > > 1. In my earlier exchange with Jay, I mentioned the broker >> writing >> > > all >> > > > > it's configs to ZK (while respecting the overrides). Then ZK can >> be >> > > used >> > > > to >> > > > > view all configs. >> > > > > > >> > > > > > 2. Need to think about this a bit more. Perhaps we can discuss >> this >> > > > > during the hangout tomorrow? >> > > > > > >> > > > > > 3 & 4) I viewed these config changes as mainly administrative >> > > > > operations. In the case, it may be reasonable to assume that the >> ZK >> > > port >> > > > is >> > > > > available for communication from the machine these commands are >> run. >> > > > Having >> > > > > a ConfigChangeRequest (or similar) is nice to have but having a >> new >> > API >> > > > and >> > > > > sending requests to controller also change how we do topic based >> > > > > configuration currently. I was hoping to keep this KIP as minimal >> as >> > > > > possible and provide a means to represent and modify client and >> > broker >> > > > > based configs in a central place. Are there any concerns if we >> tackle >> > > > these >> > > > > things in a later KIP? >> > > > > > >> > > > > > Thanks, >> > > > > > Aditya >> > > > > > ________________________________________ >> > > > > > From: Neha Narkhede [n...@confluent.io] >> > > > > > Sent: Sunday, May 03, 2015 9:48 AM >> > > > > > To: dev@kafka.apache.org >> > > > > > Subject: Re: [DISCUSS] KIP-21 Configuration Management >> > > > > > >> > > > > > Thanks for starting this discussion, Aditya. Few >> questions/comments >> > > > > > >> > > > > > 1. If you change the default values like it's mentioned in the >> KIP, >> > > do >> > > > > you >> > > > > > also overwrite the local config file as part of updating the >> > default >> > > > > value? >> > > > > > If not, where does the admin look to find the default values, >> ZK or >> > > > local >> > > > > > Kafka config file? What if a config value is different in both >> > > places? >> > > > > > >> > > > > > 2. I share Gwen's concern around making sure that popular config >> > > > > management >> > > > > > tools continue to work with this change. Would love to see how >> each >> > > of >> > > > > > those would work with the proposal in the KIP. I don't know >> enough >> > > > about >> > > > > > each of the tools but seems like in some of the tools, you have >> to >> > > > define >> > > > > > some sort of class with parameter names as config names. How >> will >> > > such >> > > > > > tools find out about the config values? In Puppet, if this means >> > that >> > > > > each >> > > > > > Puppet agent has to read it from ZK, this means the ZK port has >> to >> > be >> > > > > open >> > > > > > to pretty much every machine in the DC. This is a bummer and a >> very >> > > > > > confusing requirement. Not sure if this is really a problem or >> not >> > > > (each >> > > > > of >> > > > > > those tools might behave differently), though pointing out that >> > this >> > > is >> > > > > > something worth paying attention to. >> > > > > > >> > > > > > 3. The wrapper tools that let users read/change config tools >> should >> > > not >> > > > > > depend on ZK for the reason mentioned above. It's a pain to >> assume >> > > that >> > > > > the >> > > > > > ZK port is open from any machine that needs to run this tool. >> > Ideally >> > > > > what >> > > > > > users want is a REST API to the brokers to change or read the >> > config >> > > > (ala >> > > > > > Elasticsearch), but in the absence of the REST API, we should >> think >> > > if >> > > > we >> > > > > > can write the tool such that it just requires talking to the >> Kafka >> > > > broker >> > > > > > port. This will require a config RPC. >> > > > > > >> > > > > > 4. Not sure if KIP is the right place to discuss the design of >> > > > > propagating >> > > > > > the config changes to the brokers, but have you thought about >> just >> > > > > letting >> > > > > > the controller oversee the config changes and propagate via RPC >> to >> > > the >> > > > > > brokers? That way, there is an easier way to express config >> changes >> > > > that >> > > > > > require all brokers to change it for it to be called complete. >> > Maybe >> > > > this >> > > > > > is not required, but it is hard to say if we don't discuss the >> full >> > > set >> > > > > of >> > > > > > configs that need to be dynamic. >> > > > > > >> > > > > > Thanks, >> > > > > > Neha >> > > > > > >> > > > > > On Fri, May 1, 2015 at 12:53 PM, Jay Kreps <jay.kr...@gmail.com >> > >> > > > wrote: >> > > > > > >> > > > > > > Hey Aditya, >> > > > > > > >> > > > > > > This is a great! A couple of comments: >> > > > > > > >> > > > > > > 1. Leaving the file config in place is definitely the least >> > > > > disturbance. >> > > > > > > But let's really think about getting rid of the files and just >> > have >> > > > one >> > > > > > > config mechanism. There is always a tendency to make >> everything >> > > > > pluggable >> > > > > > > which so often just leads to two mediocre solutions. Can we do >> > the >> > > > > exercise >> > > > > > > of trying to consider fully getting rid of file config and >> seeing >> > > > what >> > > > > goes >> > > > > > > wrong? >> > > > > > > >> > > > > > > 2. Do we need to model defaults? The current approach is that >> if >> > > you >> > > > > have a >> > > > > > > global config x it is overridden for a topic xyz by >> > /topics/xyz/x, >> > > > and >> > > > > I >> > > > > > > think this could be extended to /brokers/0/x. I think this is >> > > > simpler. >> > > > > We >> > > > > > > need to specify the precedence for these overrides, e.g. if >> you >> > > > > override at >> > > > > > > the broker and topic level I think the topic level takes >> > > precedence. >> > > > > > > >> > > > > > > 3. I recommend we have the producer and consumer config just >> be >> > an >> > > > > override >> > > > > > > under client.id. The override is by client id and we can have >> > > > separate >> > > > > > > properties for controlling quotas for producers and consumers. >> > > > > > > >> > > > > > > 4. Some configs can be changed just by updating the reference, >> > > others >> > > > > may >> > > > > > > require some action. An example of this is if you want to >> disable >> > > log >> > > > > > > compaction (assuming we wanted to make that dynamic) we need >> to >> > > call >> > > > > > > shutdown() on the cleaner. I think it may be required to >> > register a >> > > > > > > listener callback that gets called when the config changes. >> > > > > > > >> > > > > > > 5. For handling the reference can you explain your plan a bit? >> > > > > Currently we >> > > > > > > have an immutable KafkaConfig object with a bunch of vals. >> That >> > or >> > > > > > > individual values in there get injected all over the code >> base. I >> > > was >> > > > > > > thinking something like this: >> > > > > > > a. We retain the KafkaConfig object as an immutable object >> just >> > as >> > > > > today. >> > > > > > > b. It is no longer legit to grab values out fo that config if >> > they >> > > > are >> > > > > > > changeable. >> > > > > > > c. Instead of making KafkaConfig itself mutable we make >> > > > > KafkaConfiguration >> > > > > > > which has a single volatile reference to the current >> KafkaConfig. >> > > > > > > KafkaConfiguration is what gets passed into various >> components. >> > So >> > > to >> > > > > > > access a config you do something like config.instance.myValue. >> > When >> > > > the >> > > > > > > config changes the config manager updates this reference. >> > > > > > > d. The KafkaConfiguration is the thing that allows doing the >> > > > > > > configuration.onChange("my.config", callback) >> > > > > > > >> > > > > > > -Jay >> > > > > > > >> > > > > > > On Tue, Apr 28, 2015 at 3:57 PM, Aditya Auradkar < >> > > > > > > aaurad...@linkedin.com.invalid> wrote: >> > > > > > > >> > > > > > > > Hey everyone, >> > > > > > > > >> > > > > > > > Wrote up a KIP to update topic, client and broker configs >> > > > > dynamically via >> > > > > > > > Zookeeper. >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-21+-+Dynamic+Configuration >> > > > > > > > >> > > > > > > > Please read and provide feedback. >> > > > > > > > >> > > > > > > > Thanks, >> > > > > > > > Aditya >> > > > > > > > >> > > > > > > > PS: I've intentionally kept this discussion separate from >> KIP-5 >> > > > > since I'm >> > > > > > > > not sure if that is actively being worked on and I wanted to >> > > start >> > > > > with a >> > > > > > > > clean slate. >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > -- >> > > > > > Thanks, >> > > > > > Neha >> > > > > >> > > > > -- >> > > > > Joel >> > > > > >> > > > >> > > >> > >> > >> > >> > -- >> > >> > Regards, >> > Ashish >> > >> > > > -- > Ashish 🎤h > -- Ashish 🎤h