Thanks again Konstantine - really excited about this KIP!

I'm about ready to +1 (non-binding) it with just one comment left: What do
you think about changing the timestamp field to "discoverTimestamp" or
something like that to indicate that it is the timestamp of the _first_
time we recorded/discovered this topic. This is important if we later want
to add a "mostRecentTimestamp" field in the future to distinguish between
the two.

Almog

On Tue, Jan 21, 2020 at 8:01 AM Randall Hauch <rha...@gmail.com> wrote:

> Thanks, Konstantine.
>
> One minor request to clarify the following sentence:
>
>
> As soon as a worker detects the addition of a topic to a connector's set of
> active topics, the worker will cease to post update messages to the
> status.storage.topic for that connector.
>
>
> As it stands, it sounds like the worker will not write *any more active
> topic records for this or any connectors* to the topic specified by the
> `status.storage.topic` worker configuration once the worker detects (by
> reading) a new active topic. I suspect that this is not the intention, and
> that instead it is trying to say that no more messages *for this topic and
> connector*. IOW, something more like:
>
>
> As soon as a worker detects the addition of a topic to a connector's set of
> active topics, the worker will not post to the status.storage.topic
> additional update records for the connector and this newly-detected active
> topic.
>
>
> Otherwise, this KIP looks great!
>
> Best regards,
>
> Randall
>
> On Fri, Jan 17, 2020 at 8:04 PM Konstantine Karantasis <
> konstant...@confluent.io> wrote:
>
> > Hi all,
> >
> > I've updated KIP-558 with the following based on our previous discussion:
> >
> > * Added timestamp to the metadata (the record value).
> > * The KIP now mentions a metric-based implementation in the Rejected
> > Alternatives section.
> > * The record key format is now using the single character ':' as a
> > separator between topic-${topic name} and connector-${connector name}
> > * Added a bullet point to mention that the topic storing the new
> > information can be a partitioned topic.
> > * The KIP mentions that the feature does not require rebuilding
> connectors
> > (no changes in public interfaces/classes).
> > * Added a security section.
> > * KIP preserves symmetry with respect to reset between both types of
> > connectors and keeps reset and config as separate, unrelated endpoints.
> >
> > Given than we made significant progress these past few days and only a
> few
> > minor improvements in the KIPs text are remaining, I'd like to start the
> > vote today, so that we give this KIP the necessary time (72 hours) to
> have
> > a chance to be voted by the KIP deadline next Wednesday, Jan 22nd.
> > Let's return here, or the main vote thread for any comments (either minor
> > to major).
> >
> > Best,
> > Konstantine
> >
> >
> >
> > On Fri, Jan 17, 2020 at 3:51 PM Konstantine Karantasis <
> > konstant...@confluent.io> wrote:
> >
> > >
> > > Thanks for the follow up Chris. Replies below:
> > >
> > > On Fri, Jan 17, 2020 at 3:07 PM Christopher Egerton <
> chr...@confluent.io
> > >
> > > wrote:
> > >
> > >> Thanks, Konstantine. Just a few more questions:
> > >>
> > >> > > 2. What is the motivation for the `topic.tracking.allow.reset`
> > config?
> > >> Is
> > >> > > there any anticipated case where it would be useful to have topic
> > >> tracking
> > >> > > enabled but with resets disabled? We could easily add this
> > >> configuration
> > >> > > later if a use case arises, but if we add it now it'll be
> difficult
> > to
> > >> > > remove.
> > >> > >
> > >>
> > >> > The motivation is for operators of a Connect cluster to be able to
> > >> disable
> > >> > resetting the history of active topics altogether, while allowing at
> > the
> > >> > same time to view the active sets.
> > >>
> > >> What I was trying to ask was, is there a use case for enabling the
> > latter
> > >> but not the former? We should be careful about adding extra worker
> > configs
> > >> and unless we can anticipate a reasonable scenario in which this would
> > >> happen, we should err on the side of caution and avoid adding a config
> > >> that
> > >> would be difficult to remove later but, comparably, much easier to
> add.
> > >>
> > >
> > > The application use case is the ability to have immutable histories of
> > > topic usage or control when resets are allowed and how they are
> performed
> > > (e.g. resets could be allowed briefly during a maintenance phase and
> get
> > > disabled again).
> > > I'm also never thrilled when I add an extra configuration parameter.
> > > However namespacing here will help with the extra cognitive burden.
> > > Similarly the defaults should cover most use cases too.
> > >
> > > > > 5. As far as automatic resets for sink connectors go, I agree with
> > your
> > >> > > reasoning about the inherent asymmetry between sinks and sources,
> > and
> > >> with
> > >> > > the motivation to avoid confusing users by listing
> > no-longer-consumed
> > >> > > topics in the active topics for a sink connector. I think that
> this
> > >> > > asymmetry is worth avoiding a scenario where a connector is
> > >> reconfigured to
> > >> > > only consume from topic "foo" but, from a prior configuration,
> topic
> > >> "bar"
> > >> > > is still listed in its active topics.
> > >> > > I do want to request clarification on the meaning of the phrase
> "any
> > >> topics
> > >> > > no longer consumed" as used under the header "Restarting,
> > >> reconfiguring
> > >> or
> > >> > > deleting a connector". Does this mean that the current set of
> active
> > >> topics
> > >> > > for the connector will be filtered and any that are longer
> contained
> > >> in
> > >> the
> > >> > > sink connector's "topics" config or matched by its "topics.regex"
> > >> config
> > >> > > will be removed, or does it mean that all topics will be removed
> and
> > >> then
> > >> > > the active topics list will be repopulated as records are consumed
> > >> from
> > >> new
> > >> > > topics?
> > >> > >
> > >>
> > >> > The intention was to imply the former. But based on Randall's
> comment
> > >> > above, I'm changing the KIP to include a reset parameter in the PUT
> > >> > /connectors/{name}/config endpoint
> > >> > In this case, the reset will be a complete reset for both source and
> > >> sink
> > >> > connectors. This will help keeping the behavior symmetric between
> the
> > >> two
> > >> > connector types.
> > >>
> > >> I did see Randall's suggestion, but I was hoping we could retain some
> > more
> > >> intelligent behavior. Two things I'd like for us to avoid if possible:
> > >>
> > >> - Sinks consuming from infrequently-written topics unnecessarily
> > dropping
> > >> those topics, either as part of an explicit reset or an implicit one
> > >> - Sinks listing a topic in their active topics list that they are, in
> > >> reality, no longer consuming from
> > >>
> > >> Intelligently filtering out no-longer-consumed topics from a sink
> > >> connector's active topics list (instead of blanket resetting, or not
> > >> resetting at all) would prevent both of those from happening. We could
> > >> expand the proposed reset parameter from a boolean to a three-option
> > >> parameter with "none" (don't reset the topics list), "all" (reset the
> > >> entire topics list), and "infer" (reset all topics if for a source, or
> > >> intelligently filter out no-longer-consumed topics if for a sink).
> > >>
> > >
> > > I don't see significant advantages in the complexity that the
> three-value
> > > query parameter would introduce.
> > > Overall resetting is included for convenience and is not essential to
> the
> > > main objective of this KIP which is to track the topics used by a
> > connector
> > > during its lifetime.
> > > I think it's desirable to strike a good balance between the objective
> of
> > > tracking the topics used by connectors and keeping things simple.
> > > Given that the general programming model that Kafka Connect supports is
> > > that of continuous streams of events, representing active topics as
> > either
> > > the topics that a connector has used since it was first created or as
> the
> > > topics that have been actively used since the latest reset is
> sufficient
> > to
> > > cover a large majority of use cases.
> > >
> > > Furthermore, I see future KIPs that would add features to topic
> tracking
> > > preferable in comparison to future KIPs that would try to remedy this
> > first
> > > KIP with adjustments, simplifications and deprecation of features.
> > > Therefore, the query parameter, which I'll add to the KIP shortly, can
> > > indeed be represented as a boolean. Absence retains all topics and
> > presence
> > > resets all the topics.
> > > Based on the discussion so far, it seems that keeping things simple and
> > > symmetric is preferred. I think I agree, even if in the initial draft
> of
> > > the KIP I described how we could inspect the configuration of a sink
> > > connector for changes.
> > >
> > > Best,
> > > Konstantine
> > >
> > >
> > > Independent of your thoughts on the above, what will the default value
> > for
> > >> the newly-proposed parameter be? If resets are performed by default,
> the
> > >> first scenario I outlined would become possible; if not, then the
> second
> > >> would become possible. I'd lean towards performing them by default but
> > >> would be interested in others' thoughts. (If the proposed "infer"
> value
> > >> were the default, neither scenario would be an issue).
> > >>
> > >> Cheers,
> > >>
> > >> Chris
> > >>
> > >> On Fri, Jan 17, 2020 at 2:01 PM Konstantine Karantasis <
> > >> konstant...@confluent.io> wrote:
> > >>
> > >> > Hey Chris! Thanks for the comments. Answers inline below:
> > >> >
> > >> > On Fri, Jan 17, 2020 at 11:47 AM Christopher Egerton <
> > >> chr...@confluent.io>
> > >> > wrote:
> > >> >
> > >> > > Hi Konstantine,
> > >> > >
> > >> > > Thanks for the KIP! There's been a lot of productive discussion so
> > >> far so
> > >> > > I'll try to keep my remarks brief.
> > >> > >
> > >> > > 1. As far as resetting the active topics for a connector goes,
> it's
> > >> noted
> > >> > > in the KIP that this can be done for a deleted connector. Can this
> > >> also
> > >> > be
> > >> > > done for connectors that were never created to begin with? What
> > would
> > >> the
> > >> > > behavior be in this case? (Can this be clarified in the KIP?)
> > >> > >
> > >> >
> > >> > Indeed, the intention is to keep reset as an independent and
> > idempotent
> > >> > method.
> > >> > Keep in mind that a tombstone will be written to the topic if the
> > >> in-memory
> > >> > view (of active topics) of the worker that serves the request
> contains
> > >> this
> > >> > connector.
> > >> > This should at least prevent fake reset requests from filling up the
> > >> topic
> > >> > with tombstone messages.
> > >> >
> > >> >
> > >> >
> > >> > > 2. What is the motivation for the `topic.tracking.allow.reset`
> > >> config? Is
> > >> > > there any anticipated case where it would be useful to have topic
> > >> > tracking
> > >> > > enabled but with resets disabled? We could easily add this
> > >> configuration
> > >> > > later if a use case arises, but if we add it now it'll be
> difficult
> > to
> > >> > > remove.
> > >> > >
> > >> >
> > >> > The motivation is for operators of a Connect cluster to be able to
> > >> disable
> > >> > resetting the history of active topics altogether, while allowing at
> > the
> > >> > same time to view the active sets.
> > >> >
> > >> >
> > >> > > 3. Nit - the JSON formatting in the value format/value example
> > columns
> > >> > > under the "Format of the new status record" heading is a little
> > >> > confusing.
> > >> > > Assuming the top-level value is meant to be an object, it should
> be
> > >> > wrapped
> > >> > > in braces ("{" and "}").
> > >> > >
> > >> >
> > >> > Good catch. Fixed.
> > >> >
> > >> >
> > >> > > 4. The KIP focuses heavily on the use of the status topic for
> > storage
> > >> of
> > >> > > connector topic information, but presumably we'd also want this
> > >> > information
> > >> > > to be available in standalone mode. If this is the case, it'd be
> > nice
> > >> to
> > >> > > tweak the language to refer explicitly to distributed mode when
> > >> > discussing
> > >> > > the changes to the status topic and note (probably just in once
> > place)
> > >> > that
> > >> > > similar functionality will also be added to the standalone
> worker's
> > >> > > in-memory status store.
> > >> > >
> > >> >
> > >> > It's true that the design is detailed w.r.t. what should happen in
> the
> > >> > KafkaStatusBackingStore which is a Kafka-based implementation of the
> > >> > StatusBackingStore interface. This is intentional because this
> > >> > implementation influences and informs the semantics of topic
> tracking.
> > >> I'd
> > >> > prefer not to make the language too abstract here. A KIP is not
> > exactly
> > >> a
> > >> > standard and KIPs often discuss the impact of implementation in
> > behavior
> > >> > (this KIP is a good example). But I'm happy to add a note to mention
> > >> that
> > >> > these semantics will apply to standalone mode too.
> > >> >
> > >> >
> > >> > > 5. As far as automatic resets for sink connectors go, I agree with
> > >> your
> > >> > > reasoning about the inherent asymmetry between sinks and sources,
> > and
> > >> > with
> > >> > > the motivation to avoid confusing users by listing
> > no-longer-consumed
> > >> > > topics in the active topics for a sink connector. I think that
> this
> > >> > > asymmetry is worth avoiding a scenario where a connector is
> > >> reconfigured
> > >> > to
> > >> > > only consume from topic "foo" but, from a prior configuration,
> topic
> > >> > "bar"
> > >> > > is still listed in its active topics.
> > >> > > I do want to request clarification on the meaning of the phrase
> "any
> > >> > topics
> > >> > > no longer consumed" as used under the header "Restarting,
> > >> reconfiguring
> > >> > or
> > >> > > deleting a connector". Does this mean that the current set of
> active
> > >> > topics
> > >> > > for the connector will be filtered and any that are longer
> contained
> > >> in
> > >> > the
> > >> > > sink connector's "topics" config or matched by its "topics.regex"
> > >> config
> > >> > > will be removed, or does it mean that all topics will be removed
> and
> > >> then
> > >> > > the active topics list will be repopulated as records are consumed
> > >> from
> > >> > new
> > >> > > topics?
> > >> > >
> > >> >
> > >> > The intention was to imply the former. But based on Randall's
> comment
> > >> > above, I'm changing the KIP to include a reset parameter in the PUT
> > >> > /connectors/{name}/config endpoint
> > >> > In this case, the reset will be a complete reset for both source and
> > >> sink
> > >> > connectors. This will help keeping the behavior symmetric between
> the
> > >> two
> > >> > connector types.
> > >> >
> > >> > Best,
> > >> > Konstantine
> > >> >
> > >> >
> > >> > > Cheers,
> > >> > >
> > >> > > Chris
> > >> > >
> > >> > > On Thu, Jan 16, 2020 at 1:51 PM Konstantine Karantasis <
> > >> > > konstant...@confluent.io> wrote:
> > >> > >
> > >> > > > Thanks for new comments Randall. Following up with my replies
> > inline
> > >> > > below.
> > >> > > > I'll also go ahead and update the KIP with the suggestions that
> > are
> > >> > > > outstanding right now and post a summary of the changes.
> > >> > > >
> > >> > > > On Wed, Jan 15, 2020 at 2:37 PM Randall Hauch <rha...@gmail.com
> >
> > >> > wrote:
> > >> > > >
> > >> > > > > My responses are inline:
> > >> > > > >
> > >> > > > > On Wed, Jan 15, 2020 at 2:05 PM Konstantine Karantasis <
> > >> > > > > konstant...@confluent.io> wrote:
> > >> > > > >
> > >> > > > > > Hi Randall, Tom and Almog. I'm excited to read your
> comments.
> > >> I'll
> > >> > > > reply
> > >> > > > > in
> > >> > > > > > separate emails, in order.
> > >> > > > > >
> > >> > > > > > First, to Randall's comments, I'm replying below with a
> > >> reference
> > >> > to
> > >> > > > the
> > >> > > > > > comment number:
> > >> > > > > >
> > >> > > > > > 1. Although I can imagine we'd be interested in adding
> > >> additional
> > >> > > > > metadata
> > >> > > > > > in the record value, I didn't see the need for a timestamp
> in
> > >> this
> > >> > > > first
> > >> > > > > > draft.
> > >> > > > > > Now that you mention, the way I'd interpret a timestamp in
> the
> > >> > > > connector
> > >> > > > > > status record value would be as an approximation of since
> when
> > >> this
> > >> > > > > > connector has been using this topic.
> > >> > > > > > Happy to add this if we think this info is useful. Of
> course,
> > >> > > accuracy
> > >> > > > of
> > >> > > > > > this information depends on message retention in Kafka and
> on
> > >> how
> > >> > > long
> > >> > > > > the
> > >> > > > > > workers have been running without a restart, so this might
> > make
> > >> > this
> > >> > > > > > approximation less useful if it gets recomputed from time to
> > >> time.
> > >> > > > > > To your reference in "Recording active topics" I'll reply
> > below,
> > >> > > > because
> > >> > > > > > that's Tom's question too.
> > >> > > > > >
> > >> > > > >
> > >> > > > > Makes sense that the timestamp in the connector is the
> > >> (approximate)
> > >> > > time
> > >> > > > > that the connector has been using the topic. I do think it's
> > worth
> > >> > > adding
> > >> > > > > in the record value (not relying upon Kafka record timestamp).
> > >> > > > >
> > >> > > > > Regarding "message retention", by default Connect creates the
> > >> status
> > >> > > > topic
> > >> > > > > with compaction but no deletion policy, which means infinite
> > >> > retention.
> > >> > > > > Don't several things become problematic if finite retention is
> > >> used
> > >> > on
> > >> > > > the
> > >> > > > > status topic, or do we need to worry about this for the active
> > >> topic
> > >> > > > > records. Do we need to periodically rewrite all of the active
> > >> topic
> > >> > > > > records? If so, we could just write new records using the
> > original
> > >> > > > > timestamp as originally read by the worker. If the worker does
> > >> > > > periodically
> > >> > > > > (maybe just on task startup) rewrite the active topic records,
> > >> then
> > >> > > we'd
> > >> > > > > have to be sure about the semantics of and interplay with
> > >> concurrent
> > >> > > > > explicit "reset" calls.
> > >> > > > >
> > >> > > >
> > >> > > > Good point. These topics are configured to have infinite
> > retention.
> > >> > I'll
> > >> > > > add the timestamp as type 'long'.
> > >> > > >
> > >> > > >
> > >> > > > >
> > >> > > > > >
> > >> > > > > > 2. I'll explain with an example, that maybe is worth adding
> to
> > >> the
> > >> > > KIP
> > >> > > > > > because what's expected to happen might not be as obvious
> as I
> > >> > > thought
> > >> > > > > when
> > >> > > > > > a new topic is recorded.
> > >> > > > > > Let's say we have two workers, W1 and W2, each running two
> > >> worker
> > >> > > tasks
> > >> > > > > T11
> > >> > > > > > T12 and T21 T22 respectively associated with a connector C1.
> > All
> > >> > > tasks
> > >> > > > > will
> > >> > > > > > run producers that will produce records to the same topic,
> > >> > > > "test-topic".
> > >> > > > > > When the connector starts, both workers track this
> connector's
> > >> set
> > >> > of
> > >> > > > > > active topics as empty. Given the absence of synchronization
> > >> > (that's
> > >> > > > > good)
> > >> > > > > > in how this information is recorded and persisted in the
> > status
> > >> > > topic,
> > >> > > > > all
> > >> > > > > > four tasks might race to record status messages:
> > >> > > > > >
> > >> > > > > > For example:
> > >> > > > > >
> > >> > > > > > T11, running at worker W1, will send Kafka records with:
> > >> > > > > > key: topic-test-topic-connector-C1
> > >> > > > > > value: "topic": {  "connector": "some-source",  "task":
> > >> > > > > "some-source-TT11",
> > >> > > > > >  "name": "test-topic" }
> > >> > > > > >
> > >> > > > > > and T22, running at worker W2, will send Kafka records with:
> > >> > > > > > key: topic-test-topic-connector-C1
> > >> > > > > > value: "topic": {  "connector": "some-source",  "task":
> > >> > > > > "some-source-TT22",
> > >> > > > > >  "name": "test-topic" }
> > >> > > > > >
> > >> > > > > > (similarly tasks T12 and T21 might send topic status
> records).
> > >> > > > > >
> > >> > > > > > These four records (they might not even be four but there's
> > >> going
> > >> > to
> > >> > > be
> > >> > > > > at
> > >> > > > > > least one) may be written in any order. Because the topic is
> > >> > > compacted
> > >> > > > > and
> > >> > > > > > these records have the same key, eventually only one message
> > >> will
> > >> > be
> > >> > > > > > retained.
> > >> > > > > > The task ID of that message will be the ID of the task that
> > >> wrote
> > >> > > > last. I
> > >> > > > > > can see this being used mostly for troubleshooting.
> > >> > > > > >
> > >> > > > >
> > >> > > > > Thanks for the clarification. Might be good to clarify the
> > >> language a
> > >> > > bit
> > >> > > > > more, though I'm not convinced an example is really needed.
> > >> > > > >
> > >> > > >
> > >> > > > I'll try to see how they both fit. Sure.
> > >> > > >
> > >> > > >
> > >> > > > >
> > >> > > > >
> > >> > > > > >
> > >> > > > > > 3. I believe across the whole KIP, when I'm referring to the
> > >> task
> > >> > > > > entity, I
> > >> > > > > > imply the worker task. Not the user code that is running as
> > >> > > > > implementation
> > >> > > > > > of the SourceTask or SinkTask abstract classes. Didn't want
> to
> > >> > > increase
> > >> > > > > > complexity by referring to a task as worker task.
> > >> > > > > > But I see your point and I'm going to prefer the terms
> > "worker"
> > >> and
> > >> > > > > "worker
> > >> > > > > > task" to highlight that it's the framework that is aware of
> > this
> > >> > > > feature
> > >> > > > > > and not the user code.
> > >> > > > > >
> > >> > > > >
> > >> > > > > Thank you.
> > >> > > > >
> > >> > > >
> > >> > > >   +1
> > >> > > >
> > >> > > >
> > >> > > > >
> > >> > > > >
> > >> > > > > >
> > >> > > > > > 4. I assumed that absence of changes to the public API would
> > >> > indicate
> > >> > > > > that
> > >> > > > > > these interfaces/abstract classes remain unchanged. But
> > >> definitely
> > >> > > it's
> > >> > > > > > worth to explicitly mention that.
> > >> > > > > >
> > >> > > > >
> > >> > > > > Thanks!
> > >> > > > >
> > >> > > > > +1
> > >> > > >
> > >> > > >
> > >> > > > >
> > >> > > > > >
> > >> > > > > > 5. That is correct. My intention is to make reset work well
> > with
> > >> > the
> > >> > > > > > streaming programming model. Resetting (which btw is not
> > >> mandatory)
> > >> > > > means
> > >> > > > > > that you are cleaning the slate for a connector that is
> > >> currently
> > >> > > > > running,
> > >> > > > > > and its currently active topics will soon be populated from
> > >> scratch
> > >> > > > > because
> > >> > > > > > new records will be produced or consumed.
> > >> > > > > > But resetting is not required. I see it more like a useful
> > >> > operation,
> > >> > > > in
> > >> > > > > > case users want to clean the active topics history, without
> > >> having
> > >> > to
> > >> > > > > > delete a connector, since delete has further implications in
> > the
> > >> > > > > > connector's progress tracking.
> > >> > > > > >
> > >> > > > >
> > >> > > > > I do think it's worth trying to clarify in the document what
> > >> happens
> > >> > > when
> > >> > > > > active topics are cleared for a connector that is currently
> > >> running.
> > >> > > > >
> > >> > > >
> > >> > > > Good point.
> > >> > > >
> > >> > > >
> > >> > > > >
> > >> > > > >
> > >> > > > > >
> > >> > > > > > 6. I fixed the typo - thanks! I'm very much in favor of
> > >> preserving
> > >> > > > > symmetry
> > >> > > > > > between the two connector types. This has definitely more
> long
> > >> term
> > >> > > > > > benefits and may help to avoid confusion. However, the
> > >> asymmetry is
> > >> > > > > > inherited here by the asymmetry that exists today between
> > source
> > >> > and
> > >> > > > sink
> > >> > > > > > connectors.
> > >> > > > > > Source connector don't list topics in their configurations
> but
> > >> sink
> > >> > > > > > connectors do. So, if a user reconfigures a sink connector
> > with
> > >> a
> > >> > > > > different
> > >> > > > > > set of topics, if we don't reset the topics based on the new
> > >> > configs
> > >> > > > (and
> > >> > > > > > my thought here was to match the new configuration with the
> > set
> > >> of
> > >> > > > active
> > >> > > > > > topics), the old topics, currently not listed in the
> > connectors
> > >> > > > > > configuration, will keep showing up as active topics. The
> user
> > >> will
> > >> > > > have
> > >> > > > > to
> > >> > > > > > explicitly reset the active topics after reconfiguring to
> > avoid
> > >> > this.
> > >> > > > If
> > >> > > > > > there's consensus that preserving this asymmetry is worse
> than
> > >> > having
> > >> > > > to
> > >> > > > > > reset the active topics, I'm happy to change this in the
> KIP.
> > >> > > > > >
> > >> > > > >
> > >> > > > > Would it be easier to keep the symmetric approach (the active
> > >> topics
> > >> > > are
> > >> > > > > cleared only explicitly) if the POST connector method
> supported
> > a
> > >> new
> > >> > > > query
> > >> > > > > parameter to reset the topics before starting (but after
> > stopping
> > >> any
> > >> > > > > already running tasks)? That makes it easy to reconfigure a
> > >> connector
> > >> > > > > (source or sink) and atomically clear the active topics before
> > the
> > >> > > > > connector is (re)started. Without that feature, I can't just
> > >> > > reconfigure
> > >> > > > a
> > >> > > > > running sink connector and be sure that the active topics are
> > >> cleared
> > >> > > > > atomically -- unless we adopt the asymmetric behavior
> currently
> > in
> > >> > the
> > >> > > > KIP.
> > >> > > > >
> > >> > > > > WDYT?
> > >> > > > >
> > >> > > >
> > >> > > > I like the idea. I'll update the KIP.
> > >> > > >
> > >> > > >
> > >> > > > > > 7. What I try to avoid here is the following situation: For
> > some
> > >> > > reason
> > >> > > > > (a
> > >> > > > > > sequence of failures to write tombstones to the status
> topic),
> > >> > stale
> > >> > > > > topic
> > >> > > > > > status records remain in that topic even after a connector
> has
> > >> been
> > >> > > > > > deleted. Requiring to restart a connector with the same name
> > >> just
> > >> > to
> > >> > > > > apply
> > >> > > > > > a follow up reset of active topics doesn't seem necessary. I
> > >> like
> > >> > the
> > >> > > > > idea
> > >> > > > > > of decoupling connector existence from the maintenance of
> the
> > >> > status
> > >> > > > > topic.
> > >> > > > > > Of course, a similar clean up is something that the workers
> > >> could
> > >> > > also
> > >> > > > > > perform, but to avoid complexity and potential race
> > conditions,
> > >> I'm
> > >> > > > > leaving
> > >> > > > > > this out for the moment (it's also an implementation
> detail).
> > >> > > > > >
> > >> > > > > > 8. Indeed, a security section is warranted. I believe the
> main
> > >> > > > > implication
> > >> > > > > > is that if you are able to query a connector's status,
> config,
> > >> etc
> > >> > > you
> > >> > > > > will
> > >> > > > > > be able to also see its active topics. Furthermore, if you
> are
> > >> > > > allowing a
> > >> > > > > > worker task to create topics as well as produce or consume
> > from
> > >> > > topics
> > >> > > > > only
> > >> > > > > > via connector config overrides, leaving the worker configs
> > >> without
> > >> > > > > > permissions to these topics, meaning that you assign per
> > >> connector
> > >> > > > > > permissions and not across the board, then this feature
> should
> > >> > > respect
> > >> > > > > > this. The topics are still stored in common data structures
> > >> within
> > >> > > the
> > >> > > > > > worker and are persisted in the status topic. But this info
> > >> should
> > >> > > not
> > >> > > > be
> > >> > > > > > leaked to anyone who's not supposed to have access to the
> > status
> > >> > > topic
> > >> > > > or
> > >> > > > > > the Connect REST API endpoints. To this respect I feel this
> > >> feature
> > >> > > > > > inherits the assumptions and security guarantees of similar
> > >> > > information
> > >> > > > > > already stored by the Connect framework. I'm happy to add
> this
> > >> to a
> > >> > > > > > security section, if we agree that the above cover the
> > subject.
> > >> > > > > >
> > >> > > > >
> > >> > > > > I think that makes sense, and it'd be great to add that in a
> > >> Security
> > >> > > > > section.
> > >> > > > >
> > >> > > >
> > >> > > > I'll go ahead and add this info to a Security section.
> > >> > > >
> > >> > > > >
> > >> > > > > > 9. I assumed that partitioning is implied by default,
> because
> > >> > there's
> > >> > > > no
> > >> > > > > > requirement for complete ordering of topic status records.
> But
> > >> I'll
> > >> > > add
> > >> > > > > > this fact as a separate bullet. The status.storage.topic is
> > >> > already a
> > >> > > > > > partitioned topic.
> > >> > > > > >
> > >> > > > >
> > >> > > > > Agreed. I think it'd be sufficient to simply mention that
> > >> partition
> > >> > > will
> > >> > > > be
> > >> > > > > chosen based upon the active topic records' keys, ensuring
> that
> > >> all
> > >> > > > active
> > >> > > > > topic records for the same connector will be written to the
> same
> > >> > > > partition
> > >> > > > > and will be totally ordered.
> > >> > > > >
> > >> > > >
> > >> > > > I'm adding a bullet point to refer to partitioning for this
> topic.
> > >> > Thanks
> > >> > > >
> > >> > > > - Konstantine
> > >> > > >
> > >> > > >
> > >> > > > > >
> > >> > > > > > I'm following up with the rest of the comments, shortly.
> > >> > > > > > Thanks,
> > >> > > > > > Konstantine
> > >> > > > > >
> > >> > > > > >
> > >> > > > > > On Wed, Jan 15, 2020 at 9:19 AM Almog Gavra <
> > al...@confluent.io
> > >> >
> > >> > > > wrote:
> > >> > > > > >
> > >> > > > > > > Hi Konstantine,
> > >> > > > > > >
> > >> > > > > > > Thanks for the KIP! This is going to make automatic
> > >> integration
> > >> > > with
> > >> > > > > > > Connect much more powerful.
> > >> > > > > > >
> > >> > > > > > > My thoughts are mostly around freshness of the data and
> > being
> > >> > able
> > >> > > to
> > >> > > > > > > expose that to users. Riffing on Randall's timestamp
> > question
> > >> -
> > >> > > have
> > >> > > > we
> > >> > > > > > > considered adding some interval at which point a connector
> > >> will
> > >> > > > > republish
> > >> > > > > > > any topics that it encounters and update the timestamp?
> That
> > >> way
> > >> > we
> > >> > > > > have
> > >> > > > > > > some refreshing mechanism that isn't as powerful as the
> > >> complete
> > >> > > > reset
> > >> > > > > > > (which may not be practical in many scenarios).
> > >> > > > > > >
> > >> > > > > > > I also agree with Randall's other point (Would it be
> better
> > to
> > >> > not
> > >> > > > > > > automatically reset connector's active topics when a sink
> > >> > connector
> > >> > > > is
> > >> > > > > > > restarted?). I think keeping the behavior as symmetrical
> > >> between
> > >> > > sink
> > >> > > > > and
> > >> > > > > > > source connectors is a good idea.
> > >> > > > > > >
> > >> > > > > > > Lastly, with regards to the API, I can imagine it is also
> > >> pretty
> > >> > > > useful
> > >> > > > > > to
> > >> > > > > > > answer the inverse question: "which connectors write to
> > topic
> > >> X".
> > >> > > > > Perhaps
> > >> > > > > > > we can achieve this by letting the users compute it and
> just
> > >> > expose
> > >> > > > an
> > >> > > > > > API
> > >> > > > > > > that returns the entire mapping at once (instead of
> needing
> > to
> > >> > call
> > >> > > > the
> > >> > > > > > > /connectors/{name}/topics endpoint for each connector).
> > >> > > > > > >
> > >> > > > > > > Otherwise, looks good to me! Hits the requirements that I
> > had
> > >> in
> > >> > > mind
> > >> > > > > on
> > >> > > > > > > the nose.
> > >> > > > > > > - Almog
> > >> > > > > > >
> > >> > > > > > > On Wed, Jan 15, 2020 at 1:14 AM Tom Bentley <
> > >> tbent...@redhat.com
> > >> > >
> > >> > > > > wrote:
> > >> > > > > > >
> > >> > > > > > > > Hi Konstantine,
> > >> > > > > > > >
> > >> > > > > > > > Thanks for the KIP, I can see how it could be useful.
> > >> > > > > > > >
> > >> > > > > > > > a) Did you consider using a metric for this? I don't
> think
> > >> it
> > >> > > would
> > >> > > > > > > satisfy
> > >> > > > > > > > all the use cases you have in mind, but you could
> mention
> > >> it in
> > >> > > the
> > >> > > > > > > > rejected alternatives.
> > >> > > > > > > >
> > >> > > > > > > > b) If the topic name contains the string "-connector"
> then
> > >> the
> > >> > > key
> > >> > > > > > format
> > >> > > > > > > > is ambiguous. This isn't necessarily fatal because the
> > value
> > >> > will
> > >> > > > > > > > disambiguate, but it could be misleading. Any reason not
> > to
> > >> > just
> > >> > > > use
> > >> > > > > a
> > >> > > > > > > JSON
> > >> > > > > > > > key, and simplify the value?
> > >> > > > > > > >
> > >> > > > > > > > c) I didn't understand this part: "As soon as a worker
> > >> detects
> > >> > > the
> > >> > > > > > > addition
> > >> > > > > > > > of a topic to a connector's set of active topics, the
> > worker
> > >> > will
> > >> > > > > cease
> > >> > > > > > > to
> > >> > > > > > > > post update messages to the status.storage.topic for
> that
> > >> > > > connector.
> > >> > > > > ".
> > >> > > > > > > I'm
> > >> > > > > > > > sure I've overlooking something but why is this
> necessary?
> > >> Is
> > >> > > this
> > >> > > > > were
> > >> > > > > > > the
> > >> > > > > > > > task id in the value is used?
> > >> > > > > > > >
> > >> > > > > > > > Thanks again,
> > >> > > > > > > >
> > >> > > > > > > > Tom
> > >> > > > > > > >
> > >> > > > > > > > On Wed, Jan 15, 2020 at 12:15 AM Randall Hauch <
> > >> > rha...@gmail.com
> > >> > > >
> > >> > > > > > wrote:
> > >> > > > > > > >
> > >> > > > > > > > > Oh, one more thing:
> > >> > > > > > > > >
> > >> > > > > > > > > 9. There's no mention of how the status topic is
> > >> partitioned,
> > >> > > or
> > >> > > > > how
> > >> > > > > > > > > partitioning will be used by the new topic records.
> The
> > >> KIP
> > >> > > > should
> > >> > > > > > > > probably
> > >> > > > > > > > > outline this for clarity and completeness.
> > >> > > > > > > > >
> > >> > > > > > > > > Best regards,
> > >> > > > > > > > >
> > >> > > > > > > > > Randall
> > >> > > > > > > > >
> > >> > > > > > > > > On Tue, Jan 14, 2020 at 5:25 PM Randall Hauch <
> > >> > > rha...@gmail.com>
> > >> > > > > > > wrote:
> > >> > > > > > > > >
> > >> > > > > > > > > > Thanks, Konstantine. Overall, this KIP looks
> > interesting
> > >> > and
> > >> > > > > really
> > >> > > > > > > > > > useful, and for the most part is spot on. I do have
> a
> > >> > number
> > >> > > of
> > >> > > > > > > > > > questions/comments about specifics:
> > >> > > > > > > > > >
> > >> > > > > > > > > >    1. The topic records have a value that includes
> the
> > >> > > > connector
> > >> > > > > > > name,
> > >> > > > > > > > > >    task number that last reported the topic is used,
> > and
> > >> > the
> > >> > > > > topic
> > >> > > > > > > > name.
> > >> > > > > > > > > >    There's no mention of record timestamps, but I
> > >> wonder if
> > >> > > > it'd
> > >> > > > > be
> > >> > > > > > > > > useful to
> > >> > > > > > > > > >    record this. One challenge might be that a
> > connector
> > >> > does
> > >> > > > not
> > >> > > > > > > write
> > >> > > > > > > > > to a
> > >> > > > > > > > > >    topic for a while or the task remains running for
> > >> long
> > >> > > > periods
> > >> > > > > > of
> > >> > > > > > > > > time and
> > >> > > > > > > > > >    therefore the worker doesn't record that this
> topic
> > >> has
> > >> > > been
> > >> > > > > > newly
> > >> > > > > > > > > written
> > >> > > > > > > > > >    to since it the task was restarted. IOW, the
> > >> semantics
> > >> > of
> > >> > > > the
> > >> > > > > > > > > timestamp may
> > >> > > > > > > > > >    be a bit murky. Have you thought about recording
> > the
> > >> > > > > timestamp,
> > >> > > > > > > and
> > >> > > > > > > > > if so
> > >> > > > > > > > > >    what are the pros and cons?
> > >> > > > > > > > > >    - The "Recording active topics" section says the
> > >> > > following:
> > >> > > > > > > > > >       "As soon as a worker detects the addition of a
> > >> topic
> > >> > > to a
> > >> > > > > > > > > >       connector's set of active topics, all the
> > >> connector's
> > >> > > > tasks
> > >> > > > > > > that
> > >> > > > > > > > > inspect
> > >> > > > > > > > > >       source or sink records will cease to post
> update
> > >> > > messages
> > >> > > > > to
> > >> > > > > > > the
> > >> > > > > > > > > >       status.storage.topic."
> > >> > > > > > > > > >       This probably means the timestamp won't be
> very
> > >> > useful.
> > >> > > > > > > > > >    2. The KIP says "the Kafka record value stores
> the
> > >> ID of
> > >> > > the
> > >> > > > > > task
> > >> > > > > > > > that
> > >> > > > > > > > > >    succeeded to store a topic status record last."
> > >> However,
> > >> > > > this
> > >> > > > > > is a
> > >> > > > > > > > bit
> > >> > > > > > > > > >    unclear: is it really storing the last task that
> > >> > > > successfully
> > >> > > > > > > wrote
> > >> > > > > > > > > to that
> > >> > > > > > > > > >    topic (as this would require very frequent writes
> > to
> > >> > this
> > >> > > > > > topic),
> > >> > > > > > > or
> > >> > > > > > > > > is it
> > >> > > > > > > > > >    more that this is the task that was last
> *recorded*
> > >> as
> > >> > > > having
> > >> > > > > > > > written
> > >> > > > > > > > > >    to the topic? (Here, "recorded" could be a bit
> of a
> > >> gray
> > >> > > > area,
> > >> > > > > > > since
> > >> > > > > > > > > this
> > >> > > > > > > > > >    would depend on the how the worker periodically
> > >> records
> > >> > > this
> > >> > > > > > > > > information.)
> > >> > > > > > > > > >    Any kind of clarity here might be helpful.
> > >> > > > > > > > > >    3. In the "Recording active topics" section (and
> > the
> > >> > > > > surrounding
> > >> > > > > > > > > >    sections), the "task" is used ambiguously. For
> > >> example,
> > >> > > > "when
> > >> > > > > > its
> > >> > > > > > > > > tasks
> > >> > > > > > > > > >    start processing their first records ... these
> > tasks
> > >> > will
> > >> > > > > start
> > >> > > > > > > > > inspecting
> > >> > > > > > > > > >    which is the Kafka topic of each of these
> records".
> > >> > IIUC,
> > >> > > > the
> > >> > > > > > > first
> > >> > > > > > > > > "task"
> > >> > > > > > > > > >    mentioned is the connector's task, and the second
> > is
> > >> the
> > >> > > > > > worker's
> > >> > > > > > > > > task. Do
> > >> > > > > > > > > >    we need to distinguish this more clearly?
> > >> > > > > > > > > >    4. Maybe I missed it, but does this KIP
> explicitly
> > >> say
> > >> > > that
> > >> > > > > the
> > >> > > > > > > > > >    Connector API is unchanged? It's probably worth
> > >> pointing
> > >> > > out
> > >> > > > > to
> > >> > > > > > > help
> > >> > > > > > > > > >    assuage any concerns that connector
> implementations
> > >> have
> > >> > > to
> > >> > > > > > change
> > >> > > > > > > > to
> > >> > > > > > > > > make
> > >> > > > > > > > > >    use of this feature.
> > >> > > > > > > > > >    5. In the "Resetting a connector's set of active
> > >> topics"
> > >> > > > > section
> > >> > > > > > > the
> > >> > > > > > > > > >    behavior is not exactly clear. Consider a user
> > >> running
> > >> > > > > connector
> > >> > > > > > > > "A",
> > >> > > > > > > > > the
> > >> > > > > > > > > >    connector has been fully started and is
> processing
> > >> > > records,
> > >> > > > > and
> > >> > > > > > > the
> > >> > > > > > > > > worker
> > >> > > > > > > > > >    has recorded topic usage records. Then the user
> > >> resets
> > >> > the
> > >> > > > > > active
> > >> > > > > > > > > topics
> > >> > > > > > > > > >    for connector A while the connector is still
> > >> running? If
> > >> > > the
> > >> > > > > > > > connector
> > >> > > > > > > > > >    writes to no new topics, before the tasks are
> > >> rebalanced
> > >> > > > then
> > >> > > > > is
> > >> > > > > > > it
> > >> > > > > > > > > correct
> > >> > > > > > > > > >    that Connect would report no active topics? And
> > after
> > >> > the
> > >> > > > > tasks
> > >> > > > > > > are
> > >> > > > > > > > > >    rebalance, will the worker record any topics used
> > by
> > >> > > > connector
> > >> > > > > > A?
> > >> > > > > > > > > >    6. In the "Restaring" (misspelled) section:
> > >> > > "Reconfiguring a
> > >> > > > > > > source
> > >> > > > > > > > > >    connector has also no altering effect for a
> source
> > >> > > > connector.
> > >> > > > > > > > > However, when
> > >> > > > > > > > > >    reconfiguring a sink connector if the new
> > >> configuration
> > >> > no
> > >> > > > > > longer
> > >> > > > > > > > > includes
> > >> > > > > > > > > >    any of the previously tracked topics, these
> topics
> > >> will
> > >> > be
> > >> > > > > > removed
> > >> > > > > > > > > from the
> > >> > > > > > > > > >    set of active topics for this sink connector by
> > >> > appending
> > >> > > > > > > tombstone
> > >> > > > > > > > > >    messages appropriately after the reconfiguration
> of
> > >> the
> > >> > > > > > > connector."
> > >> > > > > > > > > Would
> > >> > > > > > > > > >    it be better to not automatically reset
> connector's
> > >> > active
> > >> > > > > > topics
> > >> > > > > > > > > when a
> > >> > > > > > > > > >    sink connector is restarted? Isn't that more
> > >> consistent
> > >> > > with
> > >> > > > > the
> > >> > > > > > > > > >    "Resetting" behavior and the goals at the top of
> > the
> > >> > KIP:
> > >> > > > > "it'd
> > >> > > > > > be
> > >> > > > > > > > > useful
> > >> > > > > > > > > >    for users, operators and applications to know
> which
> > >> are
> > >> > > the
> > >> > > > > > topics
> > >> > > > > > > > > that a
> > >> > > > > > > > > >    connector has used since it was first created"?
> > >> > > > > > > > > >    7. The `PUT /connectors/{name}/topics/reset`
> > endpoint
> > >> > > "this
> > >> > > > > > > request
> > >> > > > > > > > > >    can be reapplied after the deletion of the
> > >> connector".
> > >> > > IOW,
> > >> > > > > even
> > >> > > > > > > > > though
> > >> > > > > > > > > >    connector with that name doesn't exist, we can
> > still
> > >> > make
> > >> > > > this
> > >> > > > > > > > > request? How
> > >> > > > > > > > > >    does this compare with other methods such as
> > >> "status"?
> > >> > > > > > > > > >    8. What are the security implications of this
> > >> proposal?
> > >> > > > > > > > > >
> > >> > > > > > > > > > As you can see, most of these can probably be
> > addressed
> > >> > > without
> > >> > > > > > much
> > >> > > > > > > > > work.
> > >> > > > > > > > > >
> > >> > > > > > > > > > Best regards,
> > >> > > > > > > > > >
> > >> > > > > > > > > > Randall
> > >> > > > > > > > > >
> > >> > > > > > > > > > On Mon, Jan 13, 2020 at 11:05 PM Konstantine
> > Karantasis
> > >> <
> > >> > > > > > > > > > konstant...@confluent.io> wrote:
> > >> > > > > > > > > >
> > >> > > > > > > > > >> Hi all.
> > >> > > > > > > > > >>
> > >> > > > > > > > > >> I just posted KIP-558: Track the set of actively
> used
> > >> > topics
> > >> > > > by
> > >> > > > > > > > > connectors
> > >> > > > > > > > > >> in Kafka Connect
> > >> > > > > > > > > >>
> > >> > > > > > > > > >> Wiki link here:
> > >> > > > > > > > > >>
> > >> > > > > > > > > >>
> > >> > > > > > > > >
> > >> > > > > > > >
> > >> > > > > > >
> > >> > > > > >
> > >> > > > >
> > >> > > >
> > >> > >
> > >> >
> > >>
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-558%3A+Track+the+set+of+actively+used+topics+by+connectors+in+Kafka+Connect
> > >> > > > > > > > > >>
> > >> > > > > > > > > >> I think it's a nice extension to follow up on
> KIP-158
> > >> and
> > >> > a
> > >> > > > > useful
> > >> > > > > > > > > feature
> > >> > > > > > > > > >> to the ever increasing number of applications that
> > are
> > >> > built
> > >> > > > > > around
> > >> > > > > > > > > Kafka
> > >> > > > > > > > > >> Connect.
> > >> > > > > > > > > >> Would love to hear what you think.
> > >> > > > > > > > > >>
> > >> > > > > > > > > >> Best,
> > >> > > > > > > > > >> Konstantine
> > >> > > > > > > > > >>
> > >> > > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > >
> > >> > > > > > >
> > >> > > > > >
> > >> > > > >
> > >> > > >
> > >> > >
> > >> >
> > >>
> > >
> >
>

Reply via email to