Jun, thanks for your time reviewing the KIP.

> In a MirrorSourceConnector, it seems that the offsets of the source will
be stored in a different cluster from the target cluster?

Jan Filipiak raised this issue as well, and suggested that no state be
tracked in the source cluster. I've since implemented MirrorSourceConnector
accordingly. And actually, this issue coincides with another major weakness
of legacy MirrorMaker: "rebalance storm". In both cases, the problem is due
to MirrorMaker using high-level consumer groups for replication.

MM2 does not use consumer groups at all, but instead manages its own
partition assignments and offsets. MirrorSourceConnector monitors
topic-partitions and assigns them to MirrorSourceTasks directly -- there
are no high-level subscriptions and therefore no rebalances. Likewise,
MirrorSourceConnector stores its own offsets in the target cluster, so no
state information is lost if the source cluster disappears. Both of these
features are facilitated by the Connect framework and were inspired by
Uber's uReplicator.

> If the single connect cluster model is indeed useful, it seems that we
should support it in the general connect framework since it can be useful
for managing other types connectors.

Sönke Liebau suggested this as well. I've spent some time looking into
this, and I do believe it would be possible to bring these features to
Connect in general without breaking the existing APIs. For example, maybe a
connector config could specify which worker to use as a property like
worker.name=foo, and otherwise a default worker would be used. In this
case, a "MirrorMaker cluster" would just be a Connect cluster with a
pre-configured set of workers.

My plan is to contribute MM2 and then help pull features from MM2 into
Connect. I don't think it would make sense to prime Connect first, nor do I
want to propose a bunch of changes to Connect in this one KIP. If the
concern is primarily around the co-existence of a MM2 REST API and the
nearly identical Connect API, perhaps it would make sense to split off the
"MirrorMaker clusters" section of this KIP into a separate KIP aimed at
Connect in general? Would love to hear your thoughts on this.

> Could you provide a bit more details on the content of the heartbeat
topic?

At present the heartbeat is just a timestamp and the alias of the cluster
of origin. This is more powerful than existing Connector-level metrics, as
these heartbeats are themselves replicated and can be traced across
multiple hops in the replication topology. I'll add this to the KIP.

> Also, if this is useful, should we just add it add in the connect
framework, instead of just mirror maker?

Same deal, I'd love to see this, but I don't think we should try to prime
Connect before adopting MM2.

> RemoteClusterUtils. Since this is part of the public interface, could you
document the public APIs?

Will do, thanks.

> source.cluster.bootstrap.servers/target.cluster.bootstrap.servers: Does a
Source/Sink connect need both?

Sort of. I'm using this to construct an AdminClient for topic ACL and
configuration sync, since the Connect framework doesn't expose it. I intend
to follow-up KIP-382 with a proposal to expose this info to Connectors.
There's also KIP-158, but it deals with topic creation only.

Thanks again for the feedback!

Ryanne



On Fri, Dec 7, 2018 at 6:22 PM Jun Rao <j...@confluent.io> wrote:

> Hi, Ryanne,
>
> Thanks for the KIP. At the high level, this looks like a reasonable
> proposal. A few comments below.
>
> 1. About using a single connector cluster to manage connectors accessing
> multiple Kafka clusters. It's good that you brought this up.  The following
> are the tradeoffs that I see. The benefit of using a single connect cluster
> is that it simplifies the management. There are a couple of potential
> downsides.
> (a) In a MirrorSourceConnector, it seems that the offsets of the source
> will be stored in a different cluster from the target cluster? If the data
> in the target Kafka cluster is lost (say the whole cluster is wiped out),
> one has to manually reset the offset to re-mirror the missing data. (2) If
> the offsets are stored in a separate cluster from the produced data, it
> prevents the connector from running features such as EOS since currently
> EOS doesn't span Kafka clusters. If the single connect cluster model is
> indeed useful, it seems that we should support it in the general connect
> framework since it can be useful for managing other types connectors. This
> could be related to KIP-296 since it allows connector level
> producer/consumer customization.
>
> 2. The heartbeats topic. Could you provide a bit more details on the
> content of the heartbeat topic? I am not sure how that's different from the
> connector level metrics. Also, if this is useful, should we just add it add
> in the connect framework, instead of just mirror maker?
>
> 3. RemoteClusterUtils. Since this is part of the public interface, could
> you document the public APIs?
>
> 4. source.cluster.bootstrap.servers/target.cluster.bootstrap.servers: Does
> a Source/Sink connect need both? Currently, the producer URL used in a
> SourceWorker always comes from the Worker configuration. Are you proposing
> to change that?
>
> Jun
>
> On Fri, Dec 7, 2018 at 12:18 PM Ryanne Dolan <ryannedo...@gmail.com>
> wrote:
>
> > Michael, thanks for the comments!
> >
> > >  would like to see support for this to be done by hops, as well [...]
> > This then allows ring (hops = number of brokers in the ring), mesh (every
> > cluster interconnected so hop=1), or even a tree (more fine grained
> setup)
> > cluster topology.
> >
> > That's a good idea, though we can do this at the topic level without
> > tagging individual records. A max.hop of 1 would mean "A.topic1" is
> > allowed, but not "B.A.topic1". I think the default behavior would need to
> > be max.hops = 1 to avoid unexpectedly creating a bunch of D.C.B.A...
> topics
> > when you create a fully-connected mesh topology.
> >
> > Looking ahead a bit, I can imagine an external tool computing the
> spanning
> > tree of topics among a set of clusters based on inter-cluster replication
> > lag, and setting up MM2 accordingly. But that's probably outside the
> scope
> > of this KIP :)
> >
> > >  ...standalone MirrorMaker connector...
> > >     ./bin/kafka-mirror-maker-2.sh --consumer consumer.properties
> > --producer producer.properties
> >
> > Eventually, I'd like MM2 to completely replace legacy MM, including the
> > ./bin/kafka-mirror-maker.sh script. In the meantime, it's a good idea to
> > include a standalone driver. Something like
> > ./bin/connect-mirror-maker-standalone.sh with the same high-level
> > configuration file. I'll do that, thanks.
> >
> > > I see no section on providing support for mirror maker Handlers, today
> > people can add handlers to have a little extra custom logic if needed,
> and
> > the handler api is public today so should be supported going forwards so
> > people are not on mass re-writing these.
> >
> > Great point. Connect offers single-message transformations and converters
> > for this purpose, but I agree that we should honor the existing API if
> > possible. This might be as easy as providing an adapter class between
> > connect's Transformation and mirror-maker's Handler. Maybe file a Jira
> > ticket to track this?
> >
> > Really appreciate your feedback!
> >
> > Ryanne
> >
> >
> > On Thu, Dec 6, 2018 at 7:03 PM Michael Pearce <michael.pea...@ig.com>
> > wrote:
> >
> > > Re hops to stop the cycle and to allow a range of multi cluster
> > > topologies, see https://www.rabbitmq.com/federated-exchanges.html
> where
> > > very similar was done in rabbit.
> > >
> > >
> > >
> > > On 12/7/18, 12:47 AM, "Michael Pearce" <michael.pea...@ig.com> wrote:
> > >
> > >     Nice proposal.
> > >
> > >     Some comments.
> > >
> > >
> > >     On the section around cycle detection.
> > >
> > >     I would like to see support for this to be done by hops, as well
> e.g.
> > > using approach is to use a header for the number of hops, as the mm2
> > > replicates it increases the hop count and you can make the mm2
> > configurable
> > > to only produce messages onwards where hops are less than x.
> > >     This then allows ring (hops = number of brokers in the ring), mesh
> > > (every cluster interconnected so hop=1), or even a tree (more fine
> > grained
> > > setup) cluster topology.
> > >     FYI we do this currently with the current mirror maker, using a
> > custom
> > > handler.
> > >
> > >
> > >     On the section around running a standalone MirrorMaker connector
> > >
> > >     I would suggest making this as easy to run as the mirrormakers are
> > > today, with a simple single sh script.
> > >     I assume this is what is proposed in section "Running MirrorMaker
> in
> > > legacy mode" but I would even do this before MM would be removed, with
> a
> > -2
> > > varient.
> > >     e.g.
> > >     ./bin/kafka-mirror-maker-2.sh --consumer consumer.properties
> > > --producer producer.properties
> > >
> > >     Lastly
> > >
> > >     I see no section on providing support for mirror maker Handlers,
> > today
> > > people can add handlers to have a little extra custom logic if needed,
> > and
> > > the handler api is public today so should be supported going forwards
> so
> > > people are not on mass re-writing these.
> > >
> > >     On 12/5/18, 5:36 PM, "Ryanne Dolan" <ryannedo...@gmail.com> wrote:
> > >
> > >         Sönke,
> > >
> > >         > The only thing that I could come up with is the limitation
> to a
> > > single
> > >         offset commit interval
> > >
> > >         Yes, and other internal properties, e.g. those used by the
> > internal
> > >         consumers and producers, which, granted, probably are not often
> > > changed
> > >         from their defaults, but that apply to Connectors across the
> > > entire cluster.
> > >
> > >         Ryanne
> > >
> > >         On Wed, Dec 5, 2018 at 3:21 AM Sönke Liebau
> > >         <soenke.lie...@opencore.com.invalid> wrote:
> > >
> > >         > Hi Ryanne,
> > >         >
> > >         > when you say "Currently worker configs apply across the
> entire
> > > cluster,
> > >         > which is limiting even for use-cases involving a single Kafka
> > > cluster.",
> > >         > may I ask you to elaborate on those limitations a little?
> > >         > The only thing that I could come up with is the limitation
> to a
> > > single
> > >         > offset commit interval value for all running connectors.
> > >         > Maybe also the limitation to shared config providers..
> > >         >
> > >         > But you sound like you had painful experiences with this
> > before,
> > > maybe
> > >         > you'd like to share the burden :)
> > >         >
> > >         > Best regards,
> > >         > Sönke
> > >         >
> > >         > On Wed, Dec 5, 2018 at 5:15 AM Ryanne Dolan <
> > > ryannedo...@gmail.com> wrote:
> > >         >
> > >         > > Sönke,
> > >         > >
> > >         > > I think so long as we can keep the differences at a very
> high
> > > level (i.e.
> > >         > > the "control plane"), there is little downside to MM2 and
> > > Connect
> > >         > > coexisting. I do expect them to converge to some extent,
> with
> > > features
> > >         > from
> > >         > > MM2 being pulled into Connect whenever this is possible
> > > without breaking
> > >         > > things.
> > >         > >
> > >         > > I could definitely see your idea re hierarchies or groups
> of
> > > connectors
> > >         > > being useful outside MM2. Currently "worker configs" apply
> > > across the
> > >         > > entire cluster, which is limiting even for use-cases
> > involving
> > > a single
> > >         > > Kafka cluster. If Connect supported multiple workers in the
> > > same cluster,
> > >         > > it would start to look a lot like a MM2 cluster.
> > >         > >
> > >         > > Ryanne
> > >         > >
> > >         > > On Tue, Dec 4, 2018 at 3:26 PM Sönke Liebau
> > >         > > <soenke.lie...@opencore.com.invalid> wrote:
> > >         > >
> > >         > > > Hi Ryanne,
> > >         > > >
> > >         > > > thanks for your response!
> > >         > > >
> > >         > > > It seems like you have already done a lot of
> investigation
> > > into the
> > >         > > > existing code and the solution design and all of what you
> > > write makes
> > >         > > sense
> > >         > > > to me. Would it potentially be worth adding this to the
> > KIP,
> > > now that
> > >         > you
> > >         > > > had to write it up because of me anyway?
> > >         > > >
> > >         > > > However, I am afraid that I am still not entirely
> convinced
> > > of the
> > >         > > > fundamental benefit this provides over an extended
> Connect
> > > that has the
> > >         > > > following functionality:
> > >         > > > - allow for organizing connectors into a hierarchical
> > > structure -
> > >         > > > "clusters/us-west/..."
> > >         > > > - allow defining external Kafka clusters to be used by
> > > Source and Sink
> > >         > > > connectors instead of the local cluster
> > >         > > >
> > >         > > > Personally I think both of these features are useful
> > > additions to
> > >         > > Connect,
> > >         > > > I'll address both separately below.
> > >         > > >
> > >         > > > Allowing to structure connectors in a hierarchy
> > >         > > > Organizing running connectors will grow more important as
> > > corporate
> > >         > > > customers adapt Connect and installations grow in size.
> > > Additionally
> > >         > this
> > >         > > > could be useful for ACLs in case they are ever added to
> > > Connect, as you
> > >         > > > could allow specific users access only to specific
> > > namespaces (and
> > >         > until
> > >         > > > ACLs are added it would facilitate using a reverse proxy
> > for
> > > the same
> > >         > > > effect).
> > >         > > >
> > >         > > > Allow accessing multiple external clusters
> > >         > > > The reasoning for this feature is pretty much the same as
> > > for a central
> > >         > > > Mirror Maker cluster, if a company has multiple clusters
> > for
> > > whatever
> > >         > > > reason but wants to have ingest centralized in one system
> > > aka one
> > >         > Connect
> > >         > > > cluster they would need the ability to read from and
> write
> > > to an
> > >         > > arbitrary
> > >         > > > number of Kafka clusters.
> > >         > > > I haven't really looked at the code, just poked around a
> > > couple of
> > >         > > minutes,
> > >         > > > but it appears like this could be done with fairly low
> > > effort. My
> > >         > general
> > >         > > > idea would be to leave the existing configuration options
> > > untouched -
> > >         > > > Connect will always need a "primary" cluster that is used
> > > for storage
> > >         > of
> > >         > > > internal data (config, offsets, status) there is no need
> to
> > > break
> > >         > > existing
> > >         > > > configs. But additionally allow adding named extra
> clusters
> > > by
> > >         > specifying
> > >         > > > options like
> > >         > > >   external.sales_cluster.bootstrap_servers=...
> > >         > > >   external.sales_cluster.ssl.keystore.location=...
> > >         > > >   external.marketing_cluster.bootstrap_servers=...
> > >         > > >
> > >         > > > The code for status, offset and config storage is mostly
> > > isolated in
> > >         > the
> > >         > > > Kafka[Offset|Status|Config]BackingStore classes and could
> > > remain pretty
> > >         > > > much unchanged.
> > >         > > >
> > >         > > > Producer and consumer creation for Tasks is done in the
> > > Worker as of
> > >         > > > KAFKA-7551 and is isolated in two functions. We could
> add a
> > > two more
> > >         > > > functions with an extra argument for the external cluster
> > > name to be
> > >         > used
> > >         > > > and return fitting consumers/producers.
> > >         > > > The source and sink config would then simply gain an
> > > optional setting
> > >         > to
> > >         > > > specify the cluster name.
> > >         > > >
> > >         > > > I am very sure that I am missing a few large issues with
> > > these ideas,
> > >         > I'm
> > >         > > > mostly back-of-the-napkin designing here, but it might be
> > > worth a
> > >         > second
> > >         > > > look.
> > >         > > >
> > >         > > > Once we decide to diverge into two clusters: MirrorMaker
> > and
> > > Connect, I
> > >         > > > think realistically the chance of those two ever being
> > > merged again
> > >         > > because
> > >         > > > they grow back together is practically zero - hence my
> > > hesitation.
> > >         > > >
> > >         > > > ----
> > >         > > >
> > >         > > > All of that being said, I am absolutely happy to agree to
> > > disagree, I
> > >         > > think
> > >         > > > to a certain extent this is down to a question of
> personal
> > >         > > > style/preference. And as this is your baby and you have
> put
> > > a lot more
> > >         > > > effort and thought into it than I ever will I'll shut up
> > now
> > > :)
> > >         > > >
> > >         > > > Again, thanks for all your good work!
> > >         > > >
> > >         > > > Best regards,
> > >         > > > Sönke
> > >         > > >
> > >         > > > On Fri, Nov 30, 2018 at 9:00 PM Ryanne Dolan <
> > > ryannedo...@gmail.com>
> > >         > > > wrote:
> > >         > > >
> > >         > > > > Thanks Sönke.
> > >         > > > >
> > >         > > > > > it just feels to me like an awful lot of Connect
> > > functionality
> > >         > would
> > >         > > > need
> > >         > > > > to be reimplemented or at least wrapped
> > >         > > > >
> > >         > > > > Connect currently has two drivers, ConnectDistributed
> and
> > >         > > > > ConnectStandalone. Both set up a Herder, which manages
> > > Workers. I've
> > >         > > > > implemented a third driver which sets up multiple
> > Herders,
> > > one for
> > >         > each
> > >         > > > > Kafka cluster as specified in a config file. From the
> > > Herder level
> > >         > > down,
> > >         > > > > nothing is changed or duplicated -- it's just Connect.
> > >         > > > >
> > >         > > > > For the REST API, Connect wraps a Herder in a
> RestServer
> > > class, which
> > >         > > > > creates a Jetty server with a few JAX-RS resources. One
> > of
> > > these
> > >         > > > resources
> > >         > > > > is ConnectorsResource, which is the real meat of the
> REST
> > > API,
> > >         > enabling
> > >         > > > > start, stop, creation, deletion, and configuration of
> > > Connectors.
> > >         > > > >
> > >         > > > > I've added MirrorRestServer, which wraps a set of
> Herders
> > > instead of
> > >         > > one.
> > >         > > > > The server exposes a single resource, ClustersResource,
> > > which is
> > >         > only a
> > >         > > > few
> > >         > > > > lines of code:
> > >         > > > >
> > >         > > > > @GET
> > >         > > > > @Path("/")
> > >         > > > > public Collection<String> listClusters() {
> > >         > > > >   return clusters.keySet();
> > >         > > > > }
> > >         > > > >
> > >         > > > > @Path("/{cluster}")
> > >         > > > > public ConnectorsResource
> > >         > getConnectorsForCluster(@PathParam("cluster")
> > >         > > > > cluster) {
> > >         > > > >   return new ConnectorsResource(clusters.get(cluster));
> > >         > > > > }
> > >         > > > >
> > >         > > > > (simplified a bit and subject to change)
> > >         > > > >
> > >         > > > > The ClustersResource defers to the existing
> > > ConnectorsResource, which
> > >         > > > again
> > >         > > > > is most of the Connect API. With this in place, I can
> > make
> > > requests
> > >         > > like:
> > >         > > > >
> > >         > > > > GET /clusters
> > >         > > > >
> > >         > > > > GET /clusters/us-west/connectors
> > >         > > > >
> > >         > > > > PUT /clusters/us-west/connectors/us-east/config
> > >         > > > > { "topics" : "topic1" }
> > >         > > > >
> > >         > > > > etc.
> > >         > > > >
> > >         > > > > So on the whole, very little code is involved in
> > > implementing
> > >         > > > "MirrorMaker
> > >         > > > > clusters". I won't rule out adding additional features
> on
> > > top of this
> > >         > > > basic
> > >         > > > > API, but nothing should require re-implementing what is
> > > already in
> > >         > > > Connect.
> > >         > > > >
> > >         > > > > > Wouldn't it be a viable alternative to look into
> > > extending Connect
> > >         > > > itself
> > >         > > > >
> > >         > > > > Maybe Connect will evolve to the point where Connect
> > > clusters and
> > >         > > > > MirrorMaker clusters are indistinguishable, but I think
> > > this is
> > >         > > unlikely,
> > >         > > > > since really no use-case outside replication would
> > benefit
> > > from the
> > >         > > added
> > >         > > > > complexity. Moreover, I think support for multiple
> Kafka
> > > clusters
> > >         > would
> > >         > > > be
> > >         > > > > hard to add without significant changes to the existing
> > > APIs and
> > >         > > configs,
> > >         > > > > which all assume a single Kafka cluster. I think
> > > Connect-as-a-Service
> > >         > > and
> > >         > > > > Replication-as-a-Service are sufficiently different
> > > use-cases that we
> > >         > > > > should expect the APIs and configuration files to be at
> > > least
> > >         > slightly
> > >         > > > > different, even if both use the same framework
> > underneath.
> > > That
> > >         > said, I
> > >         > > > do
> > >         > > > > plan to contribute a few improvements to the Connect
> > > framework in
> > >         > > support
> > >         > > > > of MM2 -- just nothing within the scope of the current
> > KIP.
> > >         > > > >
> > >         > > > > Thanks again!
> > >         > > > > Ryanne
> > >         > > > >
> > >         > > > >
> > >         > > > > On Fri, Nov 30, 2018 at 3:47 AM Sönke Liebau
> > >         > > > > <soenke.lie...@opencore.com.invalid> wrote:
> > >         > > > >
> > >         > > > > > Hi Ryanne,
> > >         > > > > >
> > >         > > > > > thanks. I missed the remote to remote replication
> > > scenario in my
> > >         > > train
> > >         > > > of
> > >         > > > > > thought, you are right.
> > >         > > > > >
> > >         > > > > > That being said I have to admit that I am not yet
> fully
> > > on board
> > >         > with
> > >         > > > the
> > >         > > > > > concept, sorry. But I might just be misunderstanding
> > > what your
> > >         > > > intention
> > >         > > > > > is. Let me try and explain what I think it is you are
> > > trying to do
> > >         > > and
> > >         > > > > why
> > >         > > > > > I am on the fence about that and take it from there.
> > >         > > > > >
> > >         > > > > > You want to create an extra mirrormaker driver class
> > > which will
> > >         > take
> > >         > > > > > multiple clusters as configuration options. Based on
> > > these clusters
> > >         > > it
> > >         > > > > will
> > >         > > > > > then reuse the connect workers and create as many as
> > > necessary to
> > >         > be
> > >         > > > able
> > >         > > > > > to replicate to/from each of those configured
> clusters.
> > > It will
> > >         > then
> > >         > > > > > expose a rest api (since you stated subset of Connect
> > > rest api I
> > >         > > assume
> > >         > > > > it
> > >         > > > > > will be a new / own one?)  that allows users to send
> > > requests like
> > >         > > > > > "replicate topic a from cluster 1 to cluster 1" and
> > > start a
> > >         > connector
> > >         > > > on
> > >         > > > > > the relevant worker that can offer this "route".
> > >         > > > > > This can be extended to a cluster by starting mirror
> > > maker drivers
> > >         > on
> > >         > > > > other
> > >         > > > > > nodes with the same config and it would offer all the
> > > connect
> > >         > > features
> > >         > > > of
> > >         > > > > > balancing restarting in case of failure etc.
> > >         > > > > >
> > >         > > > > > If this understanding is correct then it just feels
> to
> > > me like an
> > >         > > awful
> > >         > > > > lot
> > >         > > > > > of Connect functionality would need to be
> reimplemented
> > > or at least
> > >         > > > > > wrapped, which potentially could mean additional
> effort
> > > for
> > >         > > maintaining
> > >         > > > > and
> > >         > > > > > extending Connect down the line. Wouldn't it be a
> > viable
> > >         > alternative
> > >         > > to
> > >         > > > > > look into extending Connect itself to allow defining
> > > "remote
> > >         > > clusters"
> > >         > > > > > which can then be specified in the connector config
> to
> > > be used
> > >         > > instead
> > >         > > > of
> > >         > > > > > the local cluster? I imagine that change itself would
> > > not be too
> > >         > > > > extensive,
> > >         > > > > > the main effort would probably be in coming up with a
> > > sensible
> > >         > config
> > >         > > > > > structure and ensuring backwards compatibility with
> > > existing
> > >         > > connector
> > >         > > > > > configs.
> > >         > > > > > This would still allow to use a regular Connect
> cluster
> > > for an
> > >         > > > arbitrary
> > >         > > > > > number of clusters, thus still having a dedicated
> > > MirrorMaker
> > >         > cluster
> > >         > > > by
> > >         > > > > > running only MirrorMaker Connectors in there if you
> > want
> > > the
> > >         > > > isolation. I
> > >         > > > > > agree that it would not offer the level of
> abstraction
> > > around
> > >         > > > replication
> > >         > > > > > that your concept would enable to implement, but I
> > think
> > > if would
> > >         > be
> > >         > > > far
> > >         > > > > > less implementation and maintenance effort.
> > >         > > > > >
> > >         > > > > > But again, all of that is based on my, potentially
> > > flawed,
> > >         > > > understanding
> > >         > > > > of
> > >         > > > > > your proposal, please feel free to correct me :)
> > >         > > > > >
> > >         > > > > > Best regards,
> > >         > > > > > Sönke
> > >         > > > > >
> > >         > > > > > On Fri, Nov 30, 2018 at 1:39 AM Ryanne Dolan <
> > >         > ryannedo...@gmail.com>
> > >         > > > > > wrote:
> > >         > > > > >
> > >         > > > > > > Sönke, thanks for the feedback!
> > >         > > > > > >
> > >         > > > > > > >  the renaming policy [...] can be disabled [...]
> > The
> > > KIP itself
> > >         > > > does
> > >         > > > > > not
> > >         > > > > > > mention this
> > >         > > > > > >
> > >         > > > > > > Good catch. I've updated the KIP to call this out.
> > >         > > > > > >
> > >         > > > > > > > "MirrorMaker clusters" I am not sure I fully
> > > understand the
> > >         > issue
> > >         > > > you
> > >         > > > > > > are trying to solve
> > >         > > > > > >
> > >         > > > > > > MirrorMaker today is not scalable from an
> operational
> > >         > perspective.
> > >         > > > > Celia
> > >         > > > > > > Kung at LinkedIn does a great job of explaining
> this
> > > problem [1],
> > >         > > > which
> > >         > > > > > has
> > >         > > > > > > caused LinkedIn to drop MirrorMaker in favor of
> > > Brooklin. With
> > >         > > > > Brooklin,
> > >         > > > > > a
> > >         > > > > > > single cluster, single API, and single UI controls
> > > replication
> > >         > > flows
> > >         > > > > for
> > >         > > > > > an
> > >         > > > > > > entire data center. With MirrorMaker 2.0, the
> vision
> > > is much the
> > >         > > > same.
> > >         > > > > > >
> > >         > > > > > > If your data center consists of a small number of
> > > Kafka clusters
> > >         > > and
> > >         > > > an
> > >         > > > > > > existing Connect cluster, it might make more sense
> to
> > > re-use the
> > >         > > > > Connect
> > >         > > > > > > cluster with MirrorSource/SinkConnectors. There's
> > > nothing wrong
> > >         > > with
> > >         > > > > this
> > >         > > > > > > approach for small deployments, but this model also
> > > doesn't
> > >         > scale.
> > >         > > > This
> > >         > > > > > is
> > >         > > > > > > because Connect clusters are built around a single
> > > Kafka cluster
> > >         > --
> > >         > > > > what
> > >         > > > > > I
> > >         > > > > > > call the "primary" cluster -- and all Connectors in
> > > the cluster
> > >         > > must
> > >         > > > > > either
> > >         > > > > > > consume from or produce to this single cluster. If
> > you
> > > have more
> > >         > > than
> > >         > > > > one
> > >         > > > > > > "active" Kafka cluster in each data center, you'll
> > end
> > > up needing
> > >         > > > > > multiple
> > >         > > > > > > Connect clusters there as well.
> > >         > > > > > >
> > >         > > > > > > The problem with Connect clusters for replication
> is
> > > way less
> > >         > > severe
> > >         > > > > > > compared to legacy MirrorMaker. Generally you need
> > one
> > > Connect
> > >         > > > cluster
> > >         > > > > > per
> > >         > > > > > > active Kafka cluster. As you point out, MM2's
> > > SinkConnector means
> > >         > > you
> > >         > > > > can
> > >         > > > > > > get away with a single Connect cluster for
> topologies
> > > that center
> > >         > > > > around
> > >         > > > > > a
> > >         > > > > > > single primary cluster. But each Connector within
> > each
> > > Connect
> > >         > > > cluster
> > >         > > > > > must
> > >         > > > > > > be configured independently, with no high-level
> view
> > > of your
> > >         > > > > replication
> > >         > > > > > > flows within and between data centers.
> > >         > > > > > >
> > >         > > > > > > With MirrorMaker 2.0, a single MirrorMaker cluster
> > > manages
> > >         > > > replication
> > >         > > > > > > across any number of Kafka clusters. Much like
> > > Brooklin, MM2 does
> > >         > > the
> > >         > > > > > work
> > >         > > > > > > of setting up connectors between clusters as
> needed.
> > > This
> > >         > > > > > > Replication-as-a-Service is a huge win for larger
> > > deployments, as
> > >         > > > well
> > >         > > > > as
> > >         > > > > > > for organizations that haven't adopted Connect.
> > >         > > > > > >
> > >         > > > > > > [1]
> > >         > > > > > >
> > >         > > > > >
> > >         > > > >
> > >         > > >
> > >         > >
> > >         >
> > >
> >
> https://www.slideshare.net/ConfluentInc/more-data-more-problems-scaling-kafkamirroring-pipelines-at-linkedin
> > >         > > > > > >
> > >         > > > > > > Keep the questions coming! Thanks.
> > >         > > > > > > Ryanne
> > >         > > > > > >
> > >         > > > > > > On Thu, Nov 29, 2018 at 3:30 AM Sönke Liebau <
> > >         > > > > soenke.lie...@opencore.com
> > >         > > > > > >
> > >         > > > > > > wrote:
> > >         > > > > > >
> > >         > > > > > >> Hi Ryanne,
> > >         > > > > > >>
> > >         > > > > > >> first of all, thanks for the KIP, great work
> overall
> > > and much
> > >         > > > needed I
> > >         > > > > > >> think!
> > >         > > > > > >>
> > >         > > > > > >> I have a small comment on the renaming policy, in
> > one
> > > of the
> > >         > mails
> > >         > > > on
> > >         > > > > > >> this thread you mention that this can be disabled
> > (to
> > > replicate
> > >         > > > topic1
> > >         > > > > > in
> > >         > > > > > >> cluster A as topic1 on cluster B I assume). The
> KIP
> > > itself does
> > >         > > not
> > >         > > > > > mention
> > >         > > > > > >> this, from reading just the KIP one might get the
> > > assumption
> > >         > that
> > >         > > > > > renaming
> > >         > > > > > >> is mandatory. It might be useful to add a sentence
> > or
> > > two around
> > >         > > > > > renaming
> > >         > > > > > >> policies and what is possible here. I assume you
> > > intend to make
> > >         > > > these
> > >         > > > > > >> pluggable?
> > >         > > > > > >>
> > >         > > > > > >> Regarding the latest addition of "MirrorMaker
> > > clusters" I am not
> > >         > > > sure
> > >         > > > > I
> > >         > > > > > >> fully understand the issue you are trying to solve
> > > and what
> > >         > > exactly
> > >         > > > > > these
> > >         > > > > > >> scripts will do - but that may just me being dense
> > > about it :)
> > >         > > > > > >> I understand the limitation to a single source and
> > > target
> > >         > cluster
> > >         > > > that
> > >         > > > > > >> Connect imposes, but isn't this worked around by
> the
> > > fact that
> > >         > you
> > >         > > > > have
> > >         > > > > > >> MirrorSource- and MirrorSinkConnectors and one
> part
> > > of the
> > >         > > equation
> > >         > > > > will
> > >         > > > > > >> always be under your control?
> > >         > > > > > >> The way I understood your intention was that there
> > is
> > > a
> > >         > (regular,
> > >         > > > not
> > >         > > > > > MM)
> > >         > > > > > >> Connect Cluster somewhere next to a Kafka Cluster
> A
> > > and if you
> > >         > > > deploy
> > >         > > > > a
> > >         > > > > > >> MirrorSourceTask to that it will read messages
> from
> > a
> > > remote
> > >         > > > cluster B
> > >         > > > > > and
> > >         > > > > > >> replicate them into the local cluster A. If you
> > > deploy a
> > >         > > > > MirrorSinkTask
> > >         > > > > > it
> > >         > > > > > >> will read from local cluster A and replicate into
> > > cluster B.
> > >         > > > > > >>
> > >         > > > > > >> Since in both causes the configuration for
> cluster B
> > > will be
> > >         > > passed
> > >         > > > > into
> > >         > > > > > >> the connector in the ConnectorConfig contained in
> > the
> > > rest
> > >         > > request,
> > >         > > > > > what's
> > >         > > > > > >> to stop us from starting a third connector with a
> > >         > MirrorSourceTask
> > >         > > > > > reading
> > >         > > > > > >> from cluster C?
> > >         > > > > > >>
> > >         > > > > > >> I am a bit hesitant about the entire concept of
> > > having extra
> > >         > > scripts
> > >         > > > > to
> > >         > > > > > >> run an entire separate Connect cluster - I'd much
> > > prefer an
> > >         > option
> > >         > > > to
> > >         > > > > > use a
> > >         > > > > > >> regular connect cluster from an ops point of view.
> > Is
> > > it maybe
> > >         > > worth
> > >         > > > > > >> spending some time investigating whether we can
> come
> > > up with a
> > >         > > > change
> > >         > > > > to
> > >         > > > > > >> connect that enables what MM would need?
> > >         > > > > > >>
> > >         > > > > > >> Best regards,
> > >         > > > > > >> Sönke
> > >         > > > > > >>
> > >         > > > > > >>
> > >         > > > > > >>
> > >         > > > > > >> On Tue, Nov 27, 2018 at 10:02 PM Ryanne Dolan <
> > >         > > > ryannedo...@gmail.com>
> > >         > > > > > >> wrote:
> > >         > > > > > >>
> > >         > > > > > >>> Hey y'all, I'd like you draw your attention to a
> > new
> > > section in
> > >         > > > > KIP-382
> > >         > > > > > >>> re
> > >         > > > > > >>> MirrorMaker Clusters:
> > >         > > > > > >>>
> > >         > > > > > >>>
> > >         > > > > > >>>
> > >         > > > > >
> > >         > > > >
> > >         > > >
> > >         > >
> > >         >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-382:+MirrorMaker+2.0#KIP-382:MirrorMaker2.0-MirrorMakerClusters
> > >         > > > > > >>>
> > >         > > > > > >>> A common concern I hear about using Connect for
> > > replication is
> > >         > > that
> > >         > > > > all
> > >         > > > > > >>> SourceConnectors in a Connect cluster must use
> the
> > > same target
> > >         > > > Kafka
> > >         > > > > > >>> cluster, and likewise all SinkConnectors must use
> > > the same
> > >         > source
> > >         > > > > Kafka
> > >         > > > > > >>> cluster. In order to use multiple Kafka clusters
> > > from Connect,
> > >         > > > there
> > >         > > > > > are
> > >         > > > > > >>> two possible approaches:
> > >         > > > > > >>>
> > >         > > > > > >>> 1) use an intermediate Kafka cluster, K.
> > > SourceConnectors (A,
> > >         > B,
> > >         > > C)
> > >         > > > > > write
> > >         > > > > > >>> to K and SinkConnectors (X, Y, Z) read from K.
> This
> > > enables
> > >         > flows
> > >         > > > > like
> > >         > > > > > A
> > >         > > > > > >>> ->
> > >         > > > > > >>> K - > X but means that some topologies require
> > > extraneous hops,
> > >         > > and
> > >         > > > > > means
> > >         > > > > > >>> that K must be scaled to handle records from all
> > > sources and
> > >         > > sinks.
> > >         > > > > > >>>
> > >         > > > > > >>> 2) use multiple Connect clusters, one for each
> > > target cluster.
> > >         > > Each
> > >         > > > > > >>> cluster
> > >         > > > > > >>> has multiple SourceConnectors, one for each
> source
> > > cluster.
> > >         > This
> > >         > > > > > enables
> > >         > > > > > >>> direct replication of A -> X but means there is a
> > > proliferation
> > >         > > of
> > >         > > > > > >>> Connect
> > >         > > > > > >>> clusters, each of which must be managed
> separately.
> > >         > > > > > >>>
> > >         > > > > > >>> Both options are viable for small deployments
> > > involving a small
> > >         > > > > number
> > >         > > > > > of
> > >         > > > > > >>> Kafka clusters in a small number of data centers.
> > > However,
> > >         > > neither
> > >         > > > is
> > >         > > > > > >>> scalable, especially from an operational
> > standpoint.
> > >         > > > > > >>>
> > >         > > > > > >>> KIP-382 now introduces "MirrorMaker clusters",
> > which
> > > are
> > >         > distinct
> > >         > > > > from
> > >         > > > > > >>> Connect clusters. A single MirrorMaker cluster
> > > provides
> > >         > > > > > >>> "Replication-as-a-Service" among any number of
> > Kafka
> > > clusters
> > >         > > via a
> > >         > > > > > >>> high-level REST API based on the Connect API.
> Under
> > > the hood,
> > >         > > > > > MirrorMaker
> > >         > > > > > >>> sets up Connectors between each pair of Kafka
> > > clusters. The
> > >         > REST
> > >         > > > API
> > >         > > > > > >>> enables on-the-fly reconfiguration of each
> > > Connector, including
> > >         > > > > updates
> > >         > > > > > >>> to
> > >         > > > > > >>> topic whitelists/blacklists.
> > >         > > > > > >>>
> > >         > > > > > >>> To configure MirrorMaker 2.0, you need a
> > > configuration file
> > >         > that
> > >         > > > > lists
> > >         > > > > > >>> connection information for each Kafka cluster
> > > (broker lists,
> > >         > SSL
> > >         > > > > > settings
> > >         > > > > > >>> etc). At a minimum, this looks like:
> > >         > > > > > >>>
> > >         > > > > > >>> clusters=us-west, us-east
> > >         > > > > > >>>
> > cluster.us-west.broker.list=us-west-kafka-server:9092
> > >         > > > > > >>>
> > cluster.us-east.broker.list=us-east-kafka-server:9092
> > >         > > > > > >>>
> > >         > > > > > >>> You can specify topic whitelists and other
> > > connector-level
> > >         > > settings
> > >         > > > > > here
> > >         > > > > > >>> too, or you can use the REST API to
> remote-control
> > a
> > > running
> > >         > > > cluster.
> > >         > > > > > >>>
> > >         > > > > > >>> I've also updated the KIP with minor changes to
> > > bring it in
> > >         > line
> > >         > > > with
> > >         > > > > > the
> > >         > > > > > >>> current implementation.
> > >         > > > > > >>>
> > >         > > > > > >>> Looking forward to your feedback, thanks!
> > >         > > > > > >>> Ryanne
> > >         > > > > > >>>
> > >         > > > > > >>> On Mon, Nov 19, 2018 at 10:26 PM Ryanne Dolan <
> > >         > > > ryannedo...@gmail.com
> > >         > > > > >
> > >         > > > > > >>> wrote:
> > >         > > > > > >>>
> > >         > > > > > >>> > Dan, you've got it right. ACL sync will be done
> > by
> > > MM2
> > >         > > > > automatically
> > >         > > > > > >>> > (unless disabled) according to simple rules:
> > >         > > > > > >>> >
> > >         > > > > > >>> > - If a principal has READ access on a topic in
> a
> > > source
> > >         > > cluster,
> > >         > > > > the
> > >         > > > > > >>> same
> > >         > > > > > >>> > principal should have READ access on downstream
> > > replicated
> > >         > > topics
> > >         > > > > > >>> ("remote
> > >         > > > > > >>> > topics").
> > >         > > > > > >>> > - Only MM2 has WRITE access on "remote topics".
> > >         > > > > > >>> >
> > >         > > > > > >>> > This covers sync from upstream topics like
> > > "topic1" to
> > >         > > downstream
> > >         > > > > > >>> remote
> > >         > > > > > >>> > topics like "us-west.topic1". What's missing
> from
> > > the KIP, as
> > >         > > you
> > >         > > > > > point
> > >         > > > > > >>> > out, is ACL sync between normal topics
> > > (non-remote). If a
> > >         > > > consumer
> > >         > > > > > has
> > >         > > > > > >>> READ
> > >         > > > > > >>> > access to topic1 in an upstream cluster, should
> > it
> > > have READ
> > >         > > > access
> > >         > > > > > in
> > >         > > > > > >>> > topic1 in a downstream cluster?
> > >         > > > > > >>> >
> > >         > > > > > >>> > I think the answer generally is no, you don't
> > want
> > > to give
> > >         > > > > principals
> > >         > > > > > >>> > blanket permissions across all DCs
> automatically.
> > > For
> > >         > example,
> > >         > > > I've
> > >         > > > > > >>> seen
> > >         > > > > > >>> > scenarios where certain topics are replicated
> > > between an
> > >         > > internal
> > >         > > > > and
> > >         > > > > > >>> > external Kafka cluster. You don't want to
> > > accidentally push
> > >         > ACL
> > >         > > > > > changes
> > >         > > > > > >>> > across this boundary.
> > >         > > > > > >>> >
> > >         > > > > > >>> > Moreover, it's clear that MM2 "owns" downstream
> > > remote topics
> > >         > > > like
> > >         > > > > > >>> > "us-west.topic1" -- MM2 is the only producer
> and
> > > the only
> > >         > admin
> > >         > > > of
> > >         > > > > > >>> these
> > >         > > > > > >>> > topics -- so it's natural to have MM2 set the
> ACL
> > > for these
> > >         > > > topics.
> > >         > > > > > >>> But I
> > >         > > > > > >>> > think it would be surprising if MM2 tried to
> > > manipulate
> > >         > topics
> > >         > > it
> > >         > > > > > >>> doesn't
> > >         > > > > > >>> > own. So I think granting permissions across DCs
> > is
> > > probably
> > >         > > > outside
> > >         > > > > > >>> MM2's
> > >         > > > > > >>> > purview, but I agree it'd be nice to have
> tooling
> > > to help
> > >         > with
> > >         > > > > this.
> > >         > > > > > >>> >
> > >         > > > > > >>> > Thanks.
> > >         > > > > > >>> > Ryanne
> > >         > > > > > >>> >
> > >         > > > > > >>> > --
> > >         > > > > > >>> > www.ryannedolan.info
> > >         > > > > > >>> >
> > >         > > > > > >>> >
> > >         > > > > > >>> > On Mon, Nov 19, 2018 at 3:58 PM
> > > daniel.loci...@gmail.com <
> > >         > > > > > >>> > daniel.loci...@gmail.com> wrote:
> > >         > > > > > >>> >
> > >         > > > > > >>> >> Hi guys,
> > >         > > > > > >>> >>
> > >         > > > > > >>> >> This is an exciting topic. could I have a word
> > > here?
> > >         > > > > > >>> >> I understand there are many scenarios that we
> > can
> > > apply
> > >         > > > > mirrormaker.
> > >         > > > > > >>> I am
> > >         > > > > > >>> >> at the moment working on active/active DC
> > > solution using
> > >         > > > > > MirrorMaker;
> > >         > > > > > >>> our
> > >         > > > > > >>> >> goal is to allow  the clients to failover to
> > > connect the
> > >         > other
> > >         > > > > kafka
> > >         > > > > > >>> >> cluster (on the other DC) when an incident
> > > happens.
> > >         > > > > > >>> >>
> > >         > > > > > >>> >> To do this, I need:
> > >         > > > > > >>> >> 1 MirrorMaker to replicate the partitioned
> > > messages in a
> > >         > > > > sequential
> > >         > > > > > >>> order
> > >         > > > > > >>> >> (in timely fashion) to the same partition on
> the
> > > other
> > >         > cluster
> > >         > > > > (also
> > >         > > > > > >>> need
> > >         > > > > > >>> >> keep the promise that both clusters creates
> the
> > > same number
> > >         > of
> > >         > > > > > >>> partitions
> > >         > > > > > >>> >> for a topic) – so that a consumer can pick up
> > the
> > > right
> > >         > order
> > >         > > of
> > >         > > > > the
> > >         > > > > > >>> latest
> > >         > > > > > >>> >> messages
> > >         > > > > > >>> >> 2 MirrorMaker to replicate the local consumer
> > > offset to the
> > >         > > > other
> > >         > > > > > >>> side –
> > >         > > > > > >>> >> so that the consumer knows where is the
> offset/
> > > latest
> > >         > > messages
> > >         > > > > > >>> >> 3 MirrorMaker to provide cycle detection for
> > > messages across
> > >         > > the
> > >         > > > > > DCs.
> > >         > > > > > >>> >>
> > >         > > > > > >>> >> I can see the possibility for Remote Topic to
> > > solve all
> > >         > these
> > >         > > > > > >>> problems,
> > >         > > > > > >>> >> as long as the consumer can see the remote
> topic
> > > equally as
> > >         > > the
> > >         > > > > > local
> > >         > > > > > >>> >> topic, i.e. For a consumer which has a
> > permission
> > > to consume
> > >         > > > > topic1,
> > >         > > > > > >>> on
> > >         > > > > > >>> >> subscribe event it can automatically subscribe
> > > both
> > >         > > > remote.topic1
> > >         > > > > > and
> > >         > > > > > >>> >> local.topic1. First we need to find a way for
> > > topic ACL
> > >         > > granting
> > >         > > > > for
> > >         > > > > > >>> the
> > >         > > > > > >>> >> consumer across the DCs. Secondly the consumer
> > > need to be
> > >         > able
> > >         > > > to
> > >         > > > > > >>> subscribe
> > >         > > > > > >>> >> topics with wildcard or suffix. Last but not
> the
> > > least, the
> > >         > > > > consumer
> > >         > > > > > >>> has to
> > >         > > > > > >>> >> deal with the timely ordering of the messages
> > > from the 2
> > >         > > topics.
> > >         > > > > > >>> >>
> > >         > > > > > >>> >> My understanding is, all of these should be
> > > configurable to
> > >         > be
> > >         > > > > > turned
> > >         > > > > > >>> on
> > >         > > > > > >>> >> or off, to fit for different use cases.
> > >         > > > > > >>> >>
> > >         > > > > > >>> >> Interesting I was going to support topic
> > messages
> > > with extra
> > >         > > > > headers
> > >         > > > > > >>> of
> > >         > > > > > >>> >> source DC info, for cycle detection…..
> > >         > > > > > >>> >>
> > >         > > > > > >>> >> Looking forward your reply.
> > >         > > > > > >>> >>
> > >         > > > > > >>> >> Regards,
> > >         > > > > > >>> >>
> > >         > > > > > >>> >> Dan
> > >         > > > > > >>> >> On 2018/10/23 19:56:02, Ryanne Dolan <
> > > ryannedo...@gmail.com
> > >         > >
> > >         > > > > wrote:
> > >         > > > > > >>> >> > Alex, thanks for the feedback.
> > >         > > > > > >>> >> >
> > >         > > > > > >>> >> > > Would it be possible to utilize the
> > >         > > > > > >>> >> > > Message Headers feature to prevent
> infinite
> > > recursion
> > >         > > > > > >>> >> >
> > >         > > > > > >>> >> > This isn't necessary due to the topic
> renaming
> > > feature
> > >         > which
> > >         > > > > > already
> > >         > > > > > >>> >> > prevents infinite recursion.
> > >         > > > > > >>> >> >
> > >         > > > > > >>> >> > If you turn off topic renaming you lose
> cycle
> > > detection,
> > >         > so
> > >         > > > > maybe
> > >         > > > > > we
> > >         > > > > > >>> >> could
> > >         > > > > > >>> >> > provide message headers as an optional
> second
> > > mechanism.
> > >         > I'm
> > >         > > > not
> > >         > > > > > >>> >> opposed to
> > >         > > > > > >>> >> > that idea, but there are ways to improve
> > > efficiency if we
> > >         > > > don't
> > >         > > > > > >>> need to
> > >         > > > > > >>> >> > modify or inspect individual records.
> > >         > > > > > >>> >> >
> > >         > > > > > >>> >> > Ryanne
> > >         > > > > > >>> >> >
> > >         > > > > > >>> >> > On Tue, Oct 23, 2018 at 6:06 AM Alex
> Mironov <
> > >         > > > > > alexandr...@gmail.com
> > >         > > > > > >>> >
> > >         > > > > > >>> >> wrote:
> > >         > > > > > >>> >> >
> > >         > > > > > >>> >> > > Hey Ryanne,
> > >         > > > > > >>> >> > >
> > >         > > > > > >>> >> > > Awesome KIP, exited to see improvements in
> > > MirrorMaker
> > >         > > > land, I
> > >         > > > > > >>> >> particularly
> > >         > > > > > >>> >> > > like the reuse of Connect framework! Would
> > it
> > > be
> > >         > possible
> > >         > > to
> > >         > > > > > >>> utilize
> > >         > > > > > >>> >> the
> > >         > > > > > >>> >> > > Message Headers feature to prevent
> infinite
> > > recursion?
> > >         > For
> > >         > > > > > >>> example,
> > >         > > > > > >>> >> MM2
> > >         > > > > > >>> >> > > could stamp every message with a special
> > > header payload
> > >         > > > (e.g.
> > >         > > > > > >>> >> > > MM2="cluster-name-foo") so in case another
> > > MM2 instance
> > >         > > sees
> > >         > > > > > this
> > >         > > > > > >>> >> message
> > >         > > > > > >>> >> > > and it is configured to replicate data
> into
> > >         > > > "cluster-name-foo"
> > >         > > > > > it
> > >         > > > > > >>> >> would
> > >         > > > > > >>> >> > > just skip it instead of replicating it
> back.
> > >         > > > > > >>> >> > >
> > >         > > > > > >>> >> > > On Sat, Oct 20, 2018 at 5:48 AM Ryanne
> > Dolan <
> > >         > > > > > >>> ryannedo...@gmail.com>
> > >         > > > > > >>> >> > > wrote:
> > >         > > > > > >>> >> > >
> > >         > > > > > >>> >> > > > Thanks Harsha. Done.
> > >         > > > > > >>> >> > > >
> > >         > > > > > >>> >> > > > On Fri, Oct 19, 2018 at 1:03 AM Harsha
> > > Chintalapani <
> > >         > > > > > >>> >> ka...@harsha.io>
> > >         > > > > > >>> >> > > > wrote:
> > >         > > > > > >>> >> > > >
> > >         > > > > > >>> >> > > > > Ryanne,
> > >         > > > > > >>> >> > > > >        Makes sense. Can you please add
> > > this under
> > >         > > > rejected
> > >         > > > > > >>> >> alternatives
> > >         > > > > > >>> >> > > > so
> > >         > > > > > >>> >> > > > > that everyone has context on why it
> > > wasn’t picked.
> > >         > > > > > >>> >> > > > >
> > >         > > > > > >>> >> > > > > Thanks,
> > >         > > > > > >>> >> > > > > Harsha
> > >         > > > > > >>> >> > > > > On Oct 18, 2018, 8:02 AM -0700, Ryanne
> > > Dolan <
> > >         > > > > > >>> >> ryannedo...@gmail.com>,
> > >         > > > > > >>> >> > > > > wrote:
> > >         > > > > > >>> >> > > > >
> > >         > > > > > >>> >> > > > > Harsha, concerning uReplicator
> > > specifically, the
> > >         > > project
> > >         > > > > is
> > >         > > > > > a
> > >         > > > > > >>> >> major
> > >         > > > > > >>> >> > > > > inspiration for MM2, but I don't think
> > it
> > > is a good
> > >         > > > > > >>> foundation for
> > >         > > > > > >>> >> > > > anything
> > >         > > > > > >>> >> > > > > included in Apache Kafka. uReplicator
> > > uses Helix to
> > >         > > > solve
> > >         > > > > > >>> >> problems that
> > >         > > > > > >>> >> > > > > Connect also solves, e.g. REST API,
> live
> > >         > configuration
> > >         > > > > > >>> changes,
> > >         > > > > > >>> >> cluster
> > >         > > > > > >>> >> > > > > management, coordination etc. This
> also
> > > means that
> > >         > > > > existing
> > >         > > > > > >>> >> tooling,
> > >         > > > > > >>> >> > > > > dashboards etc that work with
> Connectors
> > > do not work
> > >         > > > with
> > >         > > > > > >>> >> uReplicator,
> > >         > > > > > >>> >> > > > and
> > >         > > > > > >>> >> > > > > any future tooling would need to treat
> > > uReplicator
> > >         > as
> > >         > > a
> > >         > > > > > >>> special
> > >         > > > > > >>> >> case.
> > >         > > > > > >>> >> > > > >
> > >         > > > > > >>> >> > > > > Ryanne
> > >         > > > > > >>> >> > > > >
> > >         > > > > > >>> >> > > > > On Wed, Oct 17, 2018 at 12:30 PM
> Ryanne
> > > Dolan <
> > >         > > > > > >>> >> ryannedo...@gmail.com>
> > >         > > > > > >>> >> > > > > wrote:
> > >         > > > > > >>> >> > > > >
> > >         > > > > > >>> >> > > > >> Harsha, yes I can do that. I'll
> update
> > > the KIP
> > >         > > > > accordingly,
> > >         > > > > > >>> >> thanks.
> > >         > > > > > >>> >> > > > >>
> > >         > > > > > >>> >> > > > >> Ryanne
> > >         > > > > > >>> >> > > > >>
> > >         > > > > > >>> >> > > > >> On Wed, Oct 17, 2018 at 12:18 PM
> > Harsha <
> > >         > > > ka...@harsha.io
> > >         > > > > >
> > >         > > > > > >>> wrote:
> > >         > > > > > >>> >> > > > >>
> > >         > > > > > >>> >> > > > >>> Hi Ryanne,
> > >         > > > > > >>> >> > > > >>>                Thanks for the KIP. I
> > am
> > > also
> > >         > curious
> > >         > > > > about
> > >         > > > > > >>> why
> > >         > > > > > >>> >> not
> > >         > > > > > >>> >> > > use
> > >         > > > > > >>> >> > > > >>> the uReplicator design as the
> > > foundation given it
> > >         > > > > alreadys
> > >         > > > > > >>> >> resolves
> > >         > > > > > >>> >> > > > some of
> > >         > > > > > >>> >> > > > >>> the fundamental issues in current
> > > MIrrorMaker,
> > >         > > > updating
> > >         > > > > > the
> > >         > > > > > >>> >> confifgs
> > >         > > > > > >>> >> > > > on the
> > >         > > > > > >>> >> > > > >>> fly and running the mirror maker
> > agents
> > > in a
> > >         > worker
> > >         > > > > model
> > >         > > > > > >>> which
> > >         > > > > > >>> >> can
> > >         > > > > > >>> >> > > > >>> deployed in mesos or container
> > > orchestrations.  If
> > >         > > > > > possible
> > >         > > > > > >>> can
> > >         > > > > > >>> >> you
> > >         > > > > > >>> >> > > > >>> document in the rejected
> alternatives
> > > what are
> > >         > > missing
> > >         > > > > > parts
> > >         > > > > > >>> >> that
> > >         > > > > > >>> >> > > made
> > >         > > > > > >>> >> > > > you
> > >         > > > > > >>> >> > > > >>> to consider a new design from ground
> > up.
> > >         > > > > > >>> >> > > > >>>
> > >         > > > > > >>> >> > > > >>> Thanks,
> > >         > > > > > >>> >> > > > >>> Harsha
> > >         > > > > > >>> >> > > > >>>
> > >         > > > > > >>> >> > > > >>> On Wed, Oct 17, 2018, at 8:34 AM,
> > > Ryanne Dolan
> > >         > > wrote:
> > >         > > > > > >>> >> > > > >>> > Jan, these are two separate
> issues.
> > >         > > > > > >>> >> > > > >>> >
> > >         > > > > > >>> >> > > > >>> > 1) consumer coordination should
> not,
> > > ideally,
> > >         > > > involve
> > >         > > > > > >>> >> unreliable or
> > >         > > > > > >>> >> > > > >>> slow
> > >         > > > > > >>> >> > > > >>> > connections. Naively, a
> > > KafkaSourceConnector
> > >         > would
> > >         > > > > > >>> coordinate
> > >         > > > > > >>> >> via
> > >         > > > > > >>> >> > > the
> > >         > > > > > >>> >> > > > >>> > source cluster. We can do better
> > than
> > > this, but
> > >         > > I'm
> > >         > > > > > >>> deferring
> > >         > > > > > >>> >> this
> > >         > > > > > >>> >> > > > >>> > optimization for now.
> > >         > > > > > >>> >> > > > >>> >
> > >         > > > > > >>> >> > > > >>> > 2) exactly-once between two
> clusters
> > > is
> > >         > > > mind-bending.
> > >         > > > > > But
> > >         > > > > > >>> >> keep in
> > >         > > > > > >>> >> > > > mind
> > >         > > > > > >>> >> > > > >>> that
> > >         > > > > > >>> >> > > > >>> > transactions are managed by the
> > > producer, not
> > >         > the
> > >         > > > > > >>> consumer. In
> > >         > > > > > >>> >> > > fact,
> > >         > > > > > >>> >> > > > >>> it's
> > >         > > > > > >>> >> > > > >>> > the producer that requests that
> > > offsets be
> > >         > > committed
> > >         > > > > for
> > >         > > > > > >>> the
> > >         > > > > > >>> >> > > current
> > >         > > > > > >>> >> > > > >>> > transaction. Obviously, these
> > offsets
> > > are
> > >         > > committed
> > >         > > > in
> > >         > > > > > >>> >> whatever
> > >         > > > > > >>> >> > > > >>> cluster the
> > >         > > > > > >>> >> > > > >>> > producer is sending to.
> > >         > > > > > >>> >> > > > >>> >
> > >         > > > > > >>> >> > > > >>> > These two issues are closely
> > related.
> > > They are
> > >         > > both
> > >         > > > > > >>> resolved
> > >         > > > > > >>> >> by not
> > >         > > > > > >>> >> > > > >>> > coordinating or committing via the
> > > source
> > >         > cluster.
> > >         > > > And
> > >         > > > > > in
> > >         > > > > > >>> >> fact,
> > >         > > > > > >>> >> > > this
> > >         > > > > > >>> >> > > > >>> is the
> > >         > > > > > >>> >> > > > >>> > general model of SourceConnectors
> > > anyway, since
> > >         > > most
> > >         > > > > > >>> >> > > SourceConnectors
> > >         > > > > > >>> >> > > > >>> > _only_ have a destination cluster.
> > >         > > > > > >>> >> > > > >>> >
> > >         > > > > > >>> >> > > > >>> > If there is a lot of interest
> here,
> > I
> > > can
> > >         > expound
> > >         > > > > > further
> > >         > > > > > >>> on
> > >         > > > > > >>> >> this
> > >         > > > > > >>> >> > > > >>> aspect of
> > >         > > > > > >>> >> > > > >>> > MM2, but again I think this is
> > > premature until
> > >         > > this
> > >         > > > > > first
> > >         > > > > > >>> KIP
> > >         > > > > > >>> >> is
> > >         > > > > > >>> >> > > > >>> approved.
> > >         > > > > > >>> >> > > > >>> > I intend to address each of these
> in
> > > separate
> > >         > KIPs
> > >         > > > > > >>> following
> > >         > > > > > >>> >> this
> > >         > > > > > >>> >> > > > one.
> > >         > > > > > >>> >> > > > >>> >
> > >         > > > > > >>> >> > > > >>> > Ryanne
> > >         > > > > > >>> >> > > > >>> >
> > >         > > > > > >>> >> > > > >>> > On Wed, Oct 17, 2018 at 7:09 AM
> Jan
> > > Filipiak <
> > >         > > > > > >>> >> > > > jan.filip...@trivago.com
> > >         > > > > > >>> >> > > > >>> >
> > >         > > > > > >>> >> > > > >>> > wrote:
> > >         > > > > > >>> >> > > > >>> >
> > >         > > > > > >>> >> > > > >>> > > This is not a performance
> > > optimisation. Its a
> > >         > > > > > >>> fundamental
> > >         > > > > > >>> >> design
> > >         > > > > > >>> >> > > > >>> choice.
> > >         > > > > > >>> >> > > > >>> > >
> > >         > > > > > >>> >> > > > >>> > >
> > >         > > > > > >>> >> > > > >>> > > I never really took a look how
> > > streams does
> > >         > > > exactly
> > >         > > > > > >>> once.
> > >         > > > > > >>> >> (its a
> > >         > > > > > >>> >> > > > trap
> > >         > > > > > >>> >> > > > >>> > > anyways and you usually can deal
> > > with at least
> > >         > > > once
> > >         > > > > > >>> >> donwstream
> > >         > > > > > >>> >> > > > pretty
> > >         > > > > > >>> >> > > > >>> > > easy). But I am very certain its
> > > not gonna get
> > >         > > > > > >>> somewhere if
> > >         > > > > > >>> >> > > offset
> > >         > > > > > >>> >> > > > >>> > > commit and record produce
> cluster
> > > are not the
> > >         > > > same.
> > >         > > > > > >>> >> > > > >>> > >
> > >         > > > > > >>> >> > > > >>> > > Pretty sure without this _design
> > > choice_ you
> > >         > can
> > >         > > > > skip
> > >         > > > > > on
> > >         > > > > > >>> >> that
> > >         > > > > > >>> >> > > > exactly
> > >         > > > > > >>> >> > > > >>> > > once already
> > >         > > > > > >>> >> > > > >>> > >
> > >         > > > > > >>> >> > > > >>> > > Best Jan
> > >         > > > > > >>> >> > > > >>> > >
> > >         > > > > > >>> >> > > > >>> > > On 16.10.2018 18:16, Ryanne
> Dolan
> > > wrote:
> > >         > > > > > >>> >> > > > >>> > > >  >  But one big obstacle in
> this
> > > was
> > >         > > > > > >>> >> > > > >>> > > > always that group coordination
> > > happened on
> > >         > the
> > >         > > > > > source
> > >         > > > > > >>> >> cluster.
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > > Jan, thank you for bringing up
> > > this issue
> > >         > with
> > >         > > > > > legacy
> > >         > > > > > >>> >> > > > MirrorMaker.
> > >         > > > > > >>> >> > > > >>> I
> > >         > > > > > >>> >> > > > >>> > > > totally agree with you. This
> is
> > > one of
> > >         > several
> > >         > > > > > >>> problems
> > >         > > > > > >>> >> with
> > >         > > > > > >>> >> > > > >>> MirrorMaker
> > >         > > > > > >>> >> > > > >>> > > > I intend to solve in MM2, and
> I
> > > already
> > >         > have a
> > >         > > > > > design
> > >         > > > > > >>> and
> > >         > > > > > >>> >> > > > >>> prototype that
> > >         > > > > > >>> >> > > > >>> > > > solves this and related
> issues.
> > > But as you
> > >         > > > pointed
> > >         > > > > > >>> out,
> > >         > > > > > >>> >> this
> > >         > > > > > >>> >> > > KIP
> > >         > > > > > >>> >> > > > is
> > >         > > > > > >>> >> > > > >>> > > > already rather complex, and I
> > > want to focus
> > >         > on
> > >         > > > the
> > >         > > > > > >>> core
> > >         > > > > > >>> >> feature
> > >         > > > > > >>> >> > > > set
> > >         > > > > > >>> >> > > > >>> > > > rather than performance
> > > optimizations for
> > >         > now.
> > >         > > > If
> > >         > > > > we
> > >         > > > > > >>> can
> > >         > > > > > >>> >> agree
> > >         > > > > > >>> >> > > on
> > >         > > > > > >>> >> > > > >>> what
> > >         > > > > > >>> >> > > > >>> > > > MM2 looks like, it will be
> very
> > > easy to
> > >         > agree
> > >         > > to
> > >         > > > > > >>> improve
> > >         > > > > > >>> >> its
> > >         > > > > > >>> >> > > > >>> performance
> > >         > > > > > >>> >> > > > >>> > > > and reliability.
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > > That said, I look forward to
> > your
> > > support
> > >         > on a
> > >         > > > > > >>> subsequent
> > >         > > > > > >>> >> KIP
> > >         > > > > > >>> >> > > > that
> > >         > > > > > >>> >> > > > >>> > > > addresses consumer
> coordination
> > > and
> > >         > rebalance
> > >         > > > > > issues.
> > >         > > > > > >>> Stay
> > >         > > > > > >>> >> > > tuned!
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > > Ryanne
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > > On Tue, Oct 16, 2018 at 6:58
> AM
> > > Jan
> > >         > Filipiak <
> > >         > > > > > >>> >> > > > >>> jan.filip...@trivago.com
> > >         > > > > > >>> >> > > > >>> > > > <mailto:
> > jan.filip...@trivago.com>>
> > > wrote:
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > >     Hi,
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > >     Currently MirrorMaker is
> > > usually run
> > >         > > > > collocated
> > >         > > > > > >>> with
> > >         > > > > > >>> >> the
> > >         > > > > > >>> >> > > > target
> > >         > > > > > >>> >> > > > >>> > > >     cluster.
> > >         > > > > > >>> >> > > > >>> > > >     This is all nice and good.
> > > But one big
> > >         > > > > obstacle
> > >         > > > > > in
> > >         > > > > > >>> >> this was
> > >         > > > > > >>> >> > > > >>> > > >     always that group
> > > coordination happened
> > >         > on
> > >         > > > the
> > >         > > > > > >>> source
> > >         > > > > > >>> >> > > > cluster.
> > >         > > > > > >>> >> > > > >>> So
> > >         > > > > > >>> >> > > > >>> > > when
> > >         > > > > > >>> >> > > > >>> > > >     then network was
> congested,
> > > you
> > >         > sometimes
> > >         > > > > loose
> > >         > > > > > >>> group
> > >         > > > > > >>> >> > > > >>> membership and
> > >         > > > > > >>> >> > > > >>> > > >     have to rebalance and all
> > > this.
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > >     So one big request from we
> > > would be the
> > >         > > > > support
> > >         > > > > > of
> > >         > > > > > >>> >> having
> > >         > > > > > >>> >> > > > >>> > > coordination
> > >         > > > > > >>> >> > > > >>> > > >     cluster != source cluster.
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > >     I would generally say a
> LAN
> > > is better
> > >         > > than a
> > >         > > > > WAN
> > >         > > > > > >>> for
> > >         > > > > > >>> >> doing
> > >         > > > > > >>> >> > > > >>> group
> > >         > > > > > >>> >> > > > >>> > > >     coordinaton and there is
> no
> > > reason we
> > >         > > > couldn't
> > >         > > > > > >>> have a
> > >         > > > > > >>> >> group
> > >         > > > > > >>> >> > > > >>> consuming
> > >         > > > > > >>> >> > > > >>> > > >     topics from a different
> > > cluster and
> > >         > > > committing
> > >         > > > > > >>> >> offsets to
> > >         > > > > > >>> >> > > > >>> another
> > >         > > > > > >>> >> > > > >>> > > >     one right?
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > >     Other than that. It feels
> > > like the KIP
> > >         > has
> > >         > > > too
> > >         > > > > > >>> much
> > >         > > > > > >>> >> > > features
> > >         > > > > > >>> >> > > > >>> where
> > >         > > > > > >>> >> > > > >>> > > many
> > >         > > > > > >>> >> > > > >>> > > >     of them are not really
> > wanted
> > > and
> > >         > counter
> > >         > > > > > >>> productive
> > >         > > > > > >>> >> but I
> > >         > > > > > >>> >> > > > >>> will just
> > >         > > > > > >>> >> > > > >>> > > >     wait and see how the
> > > discussion goes.
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > >     Best Jan
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > > >     On 15.10.2018 18:16,
> Ryanne
> > > Dolan wrote:
> > >         > > > > > >>> >> > > > >>> > > >      > Hey y'all!
> > >         > > > > > >>> >> > > > >>> > > >      >
> > >         > > > > > >>> >> > > > >>> > > >      > Please take a look at
> > > KIP-382:
> > >         > > > > > >>> >> > > > >>> > > >      >
> > >         > > > > > >>> >> > > > >>> > > >      >
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > >
> > >         > > > > > >>> >> > > > >>>
> > >         > > > > > >>> >> > > >
> > >         > > > > > >>> >> > >
> > >         > > > > > >>> >>
> > >         > > > > > >>>
> > >         > > > > >
> > >         > > > >
> > >         > > >
> > >         > >
> > >         >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-382%3A+MirrorMaker+2.0
> > >         > > > > > >>> >> > > > >>> > > >      >
> > >         > > > > > >>> >> > > > >>> > > >      > Thanks for your
> feedback
> > > and support.
> > >         > > > > > >>> >> > > > >>> > > >      >
> > >         > > > > > >>> >> > > > >>> > > >      > Ryanne
> > >         > > > > > >>> >> > > > >>> > > >      >
> > >         > > > > > >>> >> > > > >>> > > >
> > >         > > > > > >>> >> > > > >>> > >
> > >         > > > > > >>> >> > > > >>>
> > >         > > > > > >>> >> > > > >>
> > >         > > > > > >>> >> > > >
> > >         > > > > > >>> >> > >
> > >         > > > > > >>> >> > >
> > >         > > > > > >>> >> > > --
> > >         > > > > > >>> >> > > Best,
> > >         > > > > > >>> >> > > Alex Mironov
> > >         > > > > > >>> >> > >
> > >         > > > > > >>> >> >
> > >         > > > > > >>> >>
> > >         > > > > > >>> >
> > >         > > > > > >>>
> > >         > > > > > >>
> > >         > > > > > >>
> > >         > > > > > >> --
> > >         > > > > > >> Sönke Liebau
> > >         > > > > > >> Partner
> > >         > > > > > >> Tel. +49 179 7940878
> > >         > > > > > >> OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 -
> > 22880
> > > Wedel -
> > >         > > > Germany
> > >         > > > > > >>
> > >         > > > > > >
> > >         > > > > >
> > >         > > > > > --
> > >         > > > > > Sönke Liebau
> > >         > > > > > Partner
> > >         > > > > > Tel. +49 179 7940878
> > >         > > > > > OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880
> > > Wedel -
> > >         > Germany
> > >         > > > > >
> > >         > > > >
> > >         > > >
> > >         > > >
> > >         > > > --
> > >         > > > Sönke Liebau
> > >         > > > Partner
> > >         > > > Tel. +49 179 7940878
> > >         > > > OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880
> Wedel
> > > - Germany
> > >         > > >
> > >         > >
> > >         >
> > >         >
> > >         > --
> > >         > Sönke Liebau
> > >         > Partner
> > >         > Tel. +49 179 7940878
> > >         > OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880 Wedel -
> > > Germany
> > >         >
> > >
> > >
> > >
> > >
> > > The information contained in this email is strictly confidential and
> for
> > > the use of the addressee only, unless otherwise indicated. If you are
> not
> > > the intended recipient, please do not read, copy, use or disclose to
> > others
> > > this message or any attachment. Please also notify the sender by
> replying
> > > to this email or by telephone (+44(020 7896 0011) and then delete the
> > email
> > > and any copies of it. Opinions, conclusion (etc) that do not relate to
> > the
> > > official business of this company shall be understood as neither given
> > nor
> > > endorsed by it. IG is a trading name of IG Markets Limited (a company
> > > registered in England and Wales, company number 04008957) and IG Index
> > > Limited (a company registered in England and Wales, company number
> > > 01190902). Registered address at Cannon Bridge House, 25 Dowgate Hill,
> > > London EC4R 2YA. Both IG Markets Limited (register number 195355) and
> IG
> > > Index Limited (register number 114059) are authorised and regulated by
> > the
> > > Financial Conduct Authority.
> > >
> >
>

Reply via email to