Bumping this thread. If there are no further comments, please add your votes here: https://www.mail-archive.com/dev@kafka.apache.org/msg100313.html
Thanks in advance, Arjun On Fri, Sep 6, 2019 at 4:22 PM Arjun Satish <arjun.sat...@gmail.com> wrote: > Thanks a lot, Jason! Answers inline. I'll also modify the kip to make > these clear. > > On Fri, Sep 6, 2019 at 4:01 PM Jason Gustafson <ja...@confluent.io> wrote: > >> Hi Arjun, >> >> The updated KIP looks good. Just a couple questions: >> >> 1. Is the /admin endpoint on the normal listener by default? If not, is >> there a way to have it use the same listener? >> > > Uses the normal listener by default. > > >> 2. Changes to logging configuration are not intended to be persistent, is >> that right? Also, I assume changes only apply to the worker that received >> the request? >> > > Changes will not be persistent and only apply to the worker that received > the request. > > >> Thanks, >> Jason >> >> On Fri, Aug 30, 2019 at 1:25 AM Arjun Satish <arjun.sat...@gmail.com> >> wrote: >> >> > OK. I didn't realize the plan was to deprecate and remove the JMX >> endpoint. >> > KIP-412 says brokers will continue to expose the JMX API. JMX was >> selected >> > so all components could follow the brokers. In light of this, I think we >> > should simply aim for semantic equivalency across the different API for >> > this functionality. >> > >> > REST is convenient for Connect. We can modify the KIP to have a /admin >> > endpoint, and /admin/loggers specifically for getting/setting the log >> > levels of different loggers. The /admin/loggers will only impact loggers >> > running in the specific worker we target requests to, and upon >> restarting >> > the worker, these loggers will reset back to their original level. >> > >> > Since configuring the rest server already has multiple config keys, I am >> > inclined to bundle this /admin endpoint on to the same listener, and >> > provide a single new config key that enables or disables the entire >> /admin >> > endpoint. This keeps the initial approach simple and doesn't require >> users >> > to configure/discover a new endpoint. >> > >> > If this works with you all, I can update the KIP. Please let me know >> what >> > you think. >> > >> > Thanks everyone. >> > >> > Best, >> > >> > On Thu, Aug 29, 2019 at 10:14 AM Colin McCabe <cmcc...@apache.org> >> wrote: >> > >> > > On Mon, Aug 26, 2019, at 14:03, Jason Gustafson wrote: >> > > > Hi Arjun, >> > > > >> > > > From a high level, I feel like we are making light of the JMX api >> > because >> > > > it's convenient and the broker already has it. Personally I would >> take >> > > the >> > > > broker out of the picture. The JMX endpoint is not something we were >> > > happy >> > > > with, hence KIP-412. Ultimately I think we will deprecate and >> remove it >> > > and >> > > > there's no point trying to standardize on a deprecated mechanism. >> > > Thinking >> > > > just about connect, we already have an HTTP endpoint. The default >> > > position >> > > > should be to add new APIs to it rather than introducing other >> > mechanisms. >> > > > The fewer ways you have to interact with a system, the better, >> right? >> > > > >> > > > I think the main argument against a REST endpoint is basically that >> > > > adjusting log levels is an administrative operation and connect is >> > > lacking >> > > > an authorization framework to enforce administrative access. The >> same >> > > > argument applies to JMX, but it has the benefit that you can specify >> > > > different credentials and it is easier to isolate since it is >> running >> > on >> > > a >> > > > separate port. As you suggested, I think the same benefits could be >> > > > achieved by having a separate /admin endpoint which is exposed >> (perhaps >> > > > optionally) on another listener. This is a pretty standard pattern. >> If >> > > > memory serves, dropwizard has something like this out of the box. We >> > > should >> > > > think hard whether there are additional administrative capabilities >> > that >> > > we >> > > > would ultimately need. The answer is probably yes, so unless we >> want to >> > > > double down on JMX, it might be worth thinking through the >> implications >> > > of >> > > > an admin endpoint now so that we're not left with odd compatibility >> > > baggage >> > > > in the future. >> > > >> > > Hi Jason, >> > > >> > > I agree... I think Connect needs a REST admin API. There will >> probably >> > be >> > > a lot of other stuff that we'll want to add to it. >> > > >> > > best, >> > > Colin >> > > >> > > > >> > > >> > > > Thanks, >> > > > Jason >> > > > >> > > > >> > > > >> > > > >> > > > On Fri, Aug 23, 2019 at 5:38 PM Arjun Satish < >> arjun.sat...@gmail.com> >> > > wrote: >> > > > >> > > > > Jason, >> > > > > >> > > > > Thanks for your comments! >> > > > > >> > > > > I understand the usability issues with JMX that you mention. But >> it >> > was >> > > > > chosen for the following reasons: >> > > > > >> > > > > 1. Cross-cutting functionality across different components (Kafka >> > > brokers, >> > > > > Connect workers and even with Streams jobs). If we go down the >> REST >> > > route, >> > > > > then brokers don't get this feature. >> > > > > 2. Adding this to existing REST servers adds the whole-or-nothing >> > > problem. >> > > > > It's hard to disable an endpoint if the functionality is not >> desired >> > or >> > > > > needs to be protected from users (Connect doesn't have ACLs which >> > makes >> > > > > this even harder to manage). Adding endpoints to different >> listeners >> > > makes >> > > > > configuring Connect harder (and it's already a hard problem as it >> > is). >> > > A >> > > > > lot of the existing functionality there is driven around the >> > connector >> > > data >> > > > > model (connectors, plugins, their statuses and so on). Adding an >> > > '/admin' >> > > > > endpoint may be a way to go, but that has tremendous implications >> (we >> > > are >> > > > > effectively adding an administration endpoint similar to the admin >> > one >> > > in >> > > > > brokers), and probably requires a KIP of its own with discussions >> > > catered >> > > > > around just that. >> > > > > 3. JMX is currently AK's default way to report metrics and perform >> > > other >> > > > > operations. Changing log levels is typically a system level/admin >> > > > > operation, and fits better there, instead of REST APIs (which is >> more >> > > user >> > > > > facing). >> > > > > >> > > > > Having said that, I'm happy to consider alternatives. JMX seemed >> to >> > be >> > > the >> > > > > lowest hanging fruit. But if there are better ideas, we can >> consider >> > > them. >> > > > > At the end of the day, when we download and run Kafka, there >> should >> > be >> > > one >> > > > > way to achieve the same functionality among its components. >> > > > > >> > > > > Finally, I hope I didn't convey that we are reverting/changing the >> > > changes >> > > > > made in KIP-412. The proposed changes would be an addition to it. >> It >> > > will >> > > > > give brokers multiple ways of changing log levels. and there is >> > still a >> > > > > consistent way of achieving cross component goals of the KIP. >> > > > > >> > > > > Best, >> > > > > >> > > > > >> > > > > On Fri, Aug 23, 2019 at 4:12 PM Jason Gustafson < >> ja...@confluent.io> >> > > > > wrote: >> > > > > >> > > > > > Let me elaborate a little bit. We made the decision early on for >> > > Connect >> > > > > to >> > > > > > use HTTP instead of Kafka's custom RPC protocol. In exchange for >> > > losing >> > > > > > some hygienic consistency with Kafka, we took easier integration >> > with >> > > > > > management tools. The scope of the connect REST APIs is really >> > > managing >> > > > > the >> > > > > > connect cluster. It has endpoints for creating connectors, >> changing >> > > > > > configs, seeing their health, etc. Doesn't debugging fit in with >> > > that? I >> > > > > am >> > > > > > not sure I see why we would treat this as an exceptional case. >> > > > > > >> > > > > > I personally see JMX as a necessary evil in Kafka because most >> > > metrics >> > > > > > agents have native support. But it is particularly painful when >> it >> > > comes >> > > > > to >> > > > > > use as an RPC mechanism. This was the central motivation behind >> > > KIP-412, >> > > > > > which makes it very odd to see a new proposal which suggests >> > > > > standardizing >> > > > > > on JMX for log level adjustment. I actually see this as >> something >> > > we'd >> > > > > want >> > > > > > to eventually turn off in Kafka. Now that we have a proper API >> with >> > > > > support >> > > > > > in the AdminClient, we can deprecate and eventually remove the >> JMX >> > > > > > endpoint. >> > > > > > >> > > > > > Thanks, >> > > > > > Jason >> > > > > > >> > > > > > On Fri, Aug 23, 2019 at 10:49 AM Jason Gustafson < >> > ja...@confluent.io >> > > > >> > > > > > wrote: >> > > > > > >> > > > > > > Hi Arjun, >> > > > > > > >> > > > > > > Thanks for the KIP. Do we really need a JMX-based API? Is >> there >> > > > > literally >> > > > > > > anyone in the world that wants to use JMX if they don't have >> to? >> > I >> > > > > > thought >> > > > > > > one of the major motivations of KIP-412 was how much of a pain >> > JMX >> > > is. >> > > > > > > >> > > > > > > Thanks, >> > > > > > > Jason >> > > > > > > >> > > > > > > On Mon, Aug 19, 2019 at 5:28 PM Arjun Satish < >> > > arjun.sat...@gmail.com> >> > > > > > > wrote: >> > > > > > > >> > > > > > >> Thanks, Konstantine. >> > > > > > >> >> > > > > > >> Updated the KIP with the restrictions around log4j and added >> > > > > references >> > > > > > to >> > > > > > >> similar KIPs. >> > > > > > >> >> > > > > > >> Best, >> > > > > > >> >> > > > > > >> On Mon, Aug 19, 2019 at 3:20 PM Konstantine Karantasis < >> > > > > > >> konstant...@confluent.io> wrote: >> > > > > > >> >> > > > > > >> > Thanks Arjun, the example is useful! >> > > > > > >> > >> > > > > > >> > My point when I mentioned the restrictions around log4j is >> > that >> > > this >> > > > > > is >> > > > > > >> > information is significant and IMO needs to be included in >> the >> > > KIP. >> > > > > > >> > >> > > > > > >> > Speaking of its relevance to KIP-412, I think a reference >> > would >> > > be >> > > > > > nice >> > > > > > >> > too. >> > > > > > >> > >> > > > > > >> > Konstantine >> > > > > > >> > >> > > > > > >> > >> > > > > > >> > >> > > > > > >> > On Thu, Aug 15, 2019 at 4:00 PM Arjun Satish < >> > > > > arjun.sat...@gmail.com> >> > > > > > >> > wrote: >> > > > > > >> > >> > > > > > >> > > Hey Konstantine, >> > > > > > >> > > >> > > > > > >> > > Thanks for the feedback. >> > > > > > >> > > >> > > > > > >> > > re: the use of log4j, yes, the proposed changes will only >> > > work if >> > > > > > >> log4j >> > > > > > >> > is >> > > > > > >> > > available in runtime. We will not add the mBean if log4j >> is >> > > not >> > > > > > >> available >> > > > > > >> > > in classpath. If we change from log4j 1 to 2, that would >> > > involve >> > > > > > >> another >> > > > > > >> > > KIP, and it would need to update the changes proposed in >> > this >> > > KIP >> > > > > > and >> > > > > > >> > > others (KIP-412, for instance). >> > > > > > >> > > >> > > > > > >> > > re: use of Object types, I've changed it from Boolean to >> the >> > > > > > primitive >> > > > > > >> > type >> > > > > > >> > > for setLogLevel. We are changing the signature of the old >> > > method >> > > > > > this >> > > > > > >> > way, >> > > > > > >> > > but since it never returned null, this should be fine. >> > > > > > >> > > >> > > > > > >> > > re: example usage, I've added some screenshot on how this >> > > feature >> > > > > > >> would >> > > > > > >> > be >> > > > > > >> > > used with jconsole. >> > > > > > >> > > >> > > > > > >> > > Hope this works! >> > > > > > >> > > >> > > > > > >> > > Thanks very much, >> > > > > > >> > > Arjun >> > > > > > >> > > >> > > > > > >> > > On Wed, Aug 14, 2019 at 6:42 AM Konstantine Karantasis < >> > > > > > >> > > konstant...@confluent.io> wrote: >> > > > > > >> > > >> > > > > > >> > > > And one thing I forgot is also related to Chris's >> comment >> > > > > above. I >> > > > > > >> > agree >> > > > > > >> > > > that an example on how a user is expected to set the >> log >> > > level >> > > > > > (for >> > > > > > >> > > > instance to DEBUG) would be nice, even if it's showing >> > only >> > > one >> > > > > > out >> > > > > > >> of >> > > > > > >> > > the >> > > > > > >> > > > many possible ways to achieve that. >> > > > > > >> > > > >> > > > > > >> > > > - Konstantine >> > > > > > >> > > > >> > > > > > >> > > > On Wed, Aug 14, 2019 at 4:38 PM Konstantine Karantasis >> < >> > > > > > >> > > > konstant...@confluent.io> wrote: >> > > > > > >> > > > >> > > > > > >> > > > > >> > > > > > >> > > > > Thanks Arjun for tackling the need to support this >> very >> > > useful >> > > > > > >> > feature. >> > > > > > >> > > > > >> > > > > > >> > > > > One thing I noticed while reading the KIP is that I >> > would >> > > have >> > > > > > >> loved >> > > > > > >> > to >> > > > > > >> > > > > see more info regarding how this proposal depends on >> the >> > > > > > >> underlying >> > > > > > >> > > > logging >> > > > > > >> > > > > APIs and implementations. For instance, my >> understanding >> > > is >> > > > > that >> > > > > > >> > slf4j >> > > > > > >> > > > can >> > > > > > >> > > > > not be leveraged and that the logging framework >> needs to >> > > be >> > > > > > >> pegged to >> > > > > > >> > > > log4j >> > > > > > >> > > > > explicitly (or another logging implementation). >> Correct >> > > me if >> > > > > > I'm >> > > > > > >> > > wrong, >> > > > > > >> > > > > but if such a dependency is introduced I believe it's >> > > worth >> > > > > > >> > mentioning. >> > > > > > >> > > > > >> > > > > > >> > > > > Additionally, if the above is correct, there are >> > > differences >> > > > > in >> > > > > > >> > log4j's >> > > > > > >> > > > > APIs between version 1 and version 2. In version 2, >> > > > > > >> Logger#setLevel >> > > > > > >> > > > method >> > > > > > >> > > > > has been removed from the Logger interface and in >> order >> > > to set >> > > > > > the >> > > > > > >> > log >> > > > > > >> > > > > level programmatically the Configurator class needs >> to >> > > used, >> > > > > > >> which as >> > > > > > >> > > > > stated in the FAQ ( >> > > > > > >> > > > > >> > > > > > >> > >> > > > > > >> > > >> https://logging.apache.org/log4j/2.x/faq.html#reconfig_level_from_code >> > > > > > >> > > ) >> > > > > > >> > > > > it's not part of log4j2's public API. Is this a >> > concern? I >> > > > > > believe >> > > > > > >> > that >> > > > > > >> > > > > even if these are implementation specific details for >> > the >> > > > > > wrappers >> > > > > > >> > > > > introduced by this KIP (which to a certain extent >> they >> > > are), a >> > > > > > >> > mention >> > > > > > >> > > in >> > > > > > >> > > > > the KIP text and a few references would be useful to >> > > > > understand >> > > > > > >> the >> > > > > > >> > > > changes >> > > > > > >> > > > > and the dependencies introduced by this proposal. >> > > > > > >> > > > > >> > > > > > >> > > > > And a few minor comments: >> > > > > > >> > > > > - Is there any specific reason that object types were >> > > > > preferred >> > > > > > in >> > > > > > >> > the >> > > > > > >> > > > > proposed interface compared to primitive types? My >> > > > > understanding >> > > > > > >> is >> > > > > > >> > > that >> > > > > > >> > > > > `null` is not expected as a return value. >> > > > > > >> > > > > - Related to the above, I think it'd be nice for the >> > > javadoc >> > > > > to >> > > > > > >> > mention >> > > > > > >> > > > > when a parameter is not expected to be `null` with an >> > > > > > appropriate >> > > > > > >> > > comment >> > > > > > >> > > > > (e.g. foo bar etc; may not be null) >> > > > > > >> > > > > >> > > > > > >> > > > > Cheers, >> > > > > > >> > > > > Konstantine >> > > > > > >> > > > > >> > > > > > >> > > > > On Tue, Aug 6, 2019 at 9:34 AM Cyrus Vafadari < >> > > > > > cy...@confluent.io >> > > > > > >> > >> > > > > > >> > > > wrote: >> > > > > > >> > > > > >> > > > > > >> > > > >> This looks like a useful feature, the strategy makes >> > > sense, >> > > > > and >> > > > > > >> the >> > > > > > >> > > KIP >> > > > > > >> > > > is >> > > > > > >> > > > >> thorough and nicely written. Thanks! >> > > > > > >> > > > >> >> > > > > > >> > > > >> Cyrus >> > > > > > >> > > > >> >> > > > > > >> > > > >> On Thu, Aug 1, 2019, 12:40 PM Chris Egerton < >> > > > > > chr...@confluent.io >> > > > > > >> > >> > > > > > >> > > > wrote: >> > > > > > >> > > > >> >> > > > > > >> > > > >> > Thanks Arjun! Looks good to me. >> > > > > > >> > > > >> > >> > > > > > >> > > > >> > On Thu, Aug 1, 2019 at 12:33 PM Arjun Satish < >> > > > > > >> > > arjun.sat...@gmail.com> >> > > > > > >> > > > >> > wrote: >> > > > > > >> > > > >> > >> > > > > > >> > > > >> > > Thanks for the feedback, Chris! >> > > > > > >> > > > >> > > >> > > > > > >> > > > >> > > Yes, the example is pretty much how Connect will >> > use >> > > the >> > > > > > new >> > > > > > >> > > > feature. >> > > > > > >> > > > >> > > Tweaked the section to make this more clear. >> > > > > > >> > > > >> > > >> > > > > > >> > > > >> > > Best, >> > > > > > >> > > > >> > > >> > > > > > >> > > > >> > > On Fri, Jul 26, 2019 at 11:52 AM Chris Egerton < >> > > > > > >> > > chr...@confluent.io >> > > > > > >> > > > > >> > > > > > >> > > > >> > > wrote: >> > > > > > >> > > > >> > > >> > > > > > >> > > > >> > > > Hi Arjun, >> > > > > > >> > > > >> > > > >> > > > > > >> > > > >> > > > This looks great. The changes to public >> interface >> > > are >> > > > > > >> pretty >> > > > > > >> > > small >> > > > > > >> > > > >> and >> > > > > > >> > > > >> > > > moving the Log4jController class into the >> clients >> > > > > package >> > > > > > >> > seems >> > > > > > >> > > > like >> > > > > > >> > > > >> > the >> > > > > > >> > > > >> > > > right way to go. One question I have--it looks >> > > like the >> > > > > > >> > purpose >> > > > > > >> > > of >> > > > > > >> > > > >> this >> > > > > > >> > > > >> > > KIP >> > > > > > >> > > > >> > > > is to enable dynamic setting of log levels in >> the >> > > > > Connect >> > > > > > >> > > > framework, >> > > > > > >> > > > >> > but >> > > > > > >> > > > >> > > > it's not clear how the Connect framework will >> use >> > > that >> > > > > > new >> > > > > > >> > > > utility. >> > > > > > >> > > > >> Is >> > > > > > >> > > > >> > > the >> > > > > > >> > > > >> > > > "Example Usage" section (which involves >> invoking >> > > the >> > > > > > >> utility >> > > > > > >> > > with >> > > > > > >> > > > a >> > > > > > >> > > > >> > > > namespace of "kafka.connect") actually meant >> to >> > be >> > > part >> > > > > > of >> > > > > > >> the >> > > > > > >> > > > >> proposed >> > > > > > >> > > > >> > > > changes to public interface? >> > > > > > >> > > > >> > > > >> > > > > > >> > > > >> > > > Cheers, >> > > > > > >> > > > >> > > > >> > > > > > >> > > > >> > > > Chris >> > > > > > >> > > > >> > > > >> > > > > > >> > > > >> > > > On Mon, Jul 22, 2019 at 11:03 PM Arjun Satish >> < >> > > > > > >> > > > >> arjun.sat...@gmail.com> >> > > > > > >> > > > >> > > > wrote: >> > > > > > >> > > > >> > > > >> > > > > > >> > > > >> > > > > Hi everyone. >> > > > > > >> > > > >> > > > > >> > > > > > >> > > > >> > > > > I'd like to propose the following KIP to >> > > implement >> > > > > > >> changing >> > > > > > >> > > log >> > > > > > >> > > > >> > levels >> > > > > > >> > > > >> > > on >> > > > > > >> > > > >> > > > > the fly in Connect workers: >> > > > > > >> > > > >> > > > > >> > > > > > >> > > > >> > > > > >> > > > > > >> > > > >> > > > > >> > > > > > >> > > > >> > > > >> > > > > > >> > > > >> > > >> > > > > > >> > > > >> > >> > > > > > >> > > > >> >> > > > > > >> > > > >> > > > > > >> > > >> > > > > > >> > >> > > > > > >> >> > > > > > >> > > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-495%3A+Dynamically+Adjust+Log+Levels+in+Connect >> > > > > > >> > > > >> > > > > >> > > > > > >> > > > >> > > > > Would like to hear your thoughts on this. >> > > > > > >> > > > >> > > > > >> > > > > > >> > > > >> > > > > Thanks very much, >> > > > > > >> > > > >> > > > > Arjun >> > > > > > >> > > > >> > > > > >> > > > > > >> > > > >> > > > >> > > > > > >> > > > >> > > >> > > > > > >> > > > >> > >> > > > > > >> > > > >> >> > > > > > >> > > > > >> > > > > > >> > > > >> > > > > > >> > > >> > > > > > >> > >> > > > > > >> >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> >