Jun, thanks. I will check again.

Regards

Bosco


On 7/17/16, 9:36 PM, "Jun Rao" <j...@confluent.io> wrote:

    Bosco,
    
    Currently, if acl is enabled, auto topic creation will succeed if the
    client has the CREATE permission.
    
    Thanks,
    
    Jun
    
    On Mon, Jul 11, 2016 at 6:26 PM, Don Bosco Durai <bo...@apache.org> wrote:
    
    > Jun, my understanding is, currently if ACLs are enabled, then auto topic
    > creation is disabled. Is this going to change with this requirement?
    >
    > Thanks
    >
    > Bosco
    >
    >
    > On 7/11/16, 1:14 PM, "Jun Rao" <j...@confluent.io> wrote:
    >
    > Ismael,
    >
    > We could change the existing behavior if it's bad for most of the users. 
In
    > the case of auto topic creation in the producer, it seems that it's at
    > least convenient in a testing environment. So, I am not sure if that
    > behavior is universally bad.
    >
    > Also, I am not sure if we can rely on the client to set the configuration
    > properly to disable auto topic creation. It seems that a safer way is to 
do
    > that on the broker side (e.g., only allow the admin to create topics
    > through ACL). Once you do that, I am not sure if we need a configuration 
to
    > enable topic creation in the producer. A producer will just error out if
    > the topic doesn't exist and the topic creation is disabled on the broker.
    >
    > Thanks,
    >
    > Jun
    >
    > On Fri, Jul 8, 2016 at 6:06 AM, Ismael Juma <ism...@juma.me.uk> wrote:
    >
    > > Hi Jun,
    > >
    > > I agree that it's closer to the existing behaviour, which some people 
may
    > > be used to by now. However, I am not sure that it won't surprise people.
    > As
    > > Grant said, auto-topic creation is a common source of confusion and it
    > > interacts badly with topic deletion.
    > >
    > > If we need to provide auto-topic creation in the client as a migration
    > path
    > > for people who rely on it and so that we can remove the server based one
    > > (after a suitable deprecation period), then can we at least have it 
false
    > > by default? This way it's more likely that people who enable it would be
    > > aware of the pitfalls and it would reduce the number of confused users.
    > >
    > > Ismael
    > >
    > > On Thu, Jul 7, 2016 at 9:47 PM, Jun Rao <j...@confluent.io> wrote:
    > >
    > > > It seems that it makes sense for the writer to trigger auto topic
    > > creation,
    > > > but not the reader. So, my preference is Jay's option #1: add a new
    > > > configuration to enable topic creation on the producer side and
    > defaults
    > > to
    > > > true. If the topic doesn't exist, the producer will send a
    > > > createTopicRequest and pick up the broker side defaults for 
#partitions
    > > and
    > > > replication factor. This matches the current behavior and won't
    > surprise
    > > > people. People who want to enforce manual topic creation can disable
    > auto
    > > > topic creation on the producer.
    > > >
    > > > On the consumer side, throwing an exception to the client when a topic
    > > > doesn't exist probably works for most cases. I am wondering if there
    > is a
    > > > case where a user really wants to start the consumer before the topic
    > is
    > > > created.
    > > >
    > > > Thanks,
    > > >
    > > > Jun
    > > >
    > > >
    > > > On Fri, Jul 1, 2016 at 4:09 AM, Ismael Juma <ism...@juma.me.uk> wrote:
    > > >
    > > > > Hi all,
    > > > >
    > > > > I think there are a few things being discussed and it would be good
    > to
    > > > make
    > > > > that explicit:
    > > > >
    > > > > 1. If and how we expose auto-topic creation in the client (under the
    > > > > assumption that the server auto-topic creation will be deprecated 
and
    > > > > eventually removed)
    > > > > 2. The ability to create topics with the cluster defaults for
    > > replication
    > > > > factor and partition counts
    > > > > 3. Support for topic "specs"
    > > > > 4. The fact that some exceptions are retriable in some cases, but 
not
    > > > > others
    > > > >
    > > > > My thoughts on each:
    > > > >
    > > > > 1. I prefer the approach where we throw an exception and let the
    > > clients
    > > > > create the topic via `AdminClient` if that's what they need.
    > > > > 2. Like Grant, I'm unsure that will generally be used in a positive
    > > way.
    > > > > However, if this is what we need to be able to deprecate server
    > > > auto-topic
    > > > > creation, the benefits outweigh the costs in my opinion.
    > > > > 3. Something like this would be good to have and could potentially
    > > > provide
    > > > > a better solution than 2. However, it needs a separate KIP and may
    > > take a
    > > > > while for the final design to be agreed. So, it should not prevent
    > > > progress
    > > > > from being made in my opinion.
    > > > > 4. This has come up before. Encoding whether an exception is
    > retriable
    > > or
    > > > > not via inheritance is a bit restrictive. Also, something that 
should
    > > be
    > > > > discussed separately, probably.
    > > > >
    > > > > Ismael
    > > > >
    > > > > On Wed, Jun 29, 2016 at 10:37 PM, Grant Henke <ghe...@cloudera.com>
    > > > wrote:
    > > > >
    > > > > > Hi Roger and Constantine,
    > > > > >
    > > > > > Thanks for the feedback.
    > > > > >
    > > > > > I agree that configuration to maintain guarantees is commonly
    > spread
    > > > > across
    > > > > > enterprise teams, making it difficult to get right. That said its
    > > also
    > > > > hard
    > > > > > to solve for every company structure too. I think there is room 
for
    > > an
    > > > > open
    > > > > > discussion about what configs should be able to be
    > > > > > validated/enforced/overridden and where configurations should
    > live. I
    > > > > think
    > > > > > thats big enough for a whole new KIP and would like to push that
    > > > > discussion
    > > > > > out until that KIP is opened. These discussions would also make
    > sense
    > > > in
    > > > > > KIP-37
    > > > > > - Add Namespaces to Kafka
    > > > > > <
    > > > > >
    > > > >
    > > >
    > >
    > 
https://cwiki.apache.org/confluence/display/KAFKA/KIP-37+-+Add+Namespaces+to+Kafka
    > > > > > >.
    > > > > > To ensure we allow validation and overrides at the namespace 
level.
    > > > > >
    > > > > > That said, KIP-4 will be introducing a config request/response
    > > protocol
    > > > > >  and adding call to get/alter configs to the admin api. You could
    > > > > leverage
    > > > > > that to do some of the client validation and defaulting based on
    > your
    > > > > > needs. Look for a discussion thread from me on that soon.
    > > > > >
    > > > > > As far as auto topic creation goes, it sounds like failing fast 
and
    > > > > > allowing the client application to create the topic would provide
    > the
    > > > > most
    > > > > > flexibility to ensure the topic matches its needed specifications.
    > > > > >
    > > > > > Thanks,
    > > > > > Grant
    > > > > >
    > > > > > On Wed, Jun 29, 2016 at 3:02 PM, Konstantin Zadorozhny <
    > > > > > konstantin.zadoroz...@tubemogul.com> wrote:
    > > > > >
    > > > > > > Roger,
    > > > > > >
    > > > > > > I concur with everything you said.
    > > > > > >
    > > > > > > Couple more use cases to prove the point:
    > > > > > >
    > > > > > >    1. Some topics should always have 1 and only one partition.
    > > > > > >    2. CDC application based on Kafka Connect. Those type of
    > > > application
    > > > > > >    absolutely must know how to create properly configured 
topics:
    > > > > > > compacted, 1
    > > > > > >    partition, replication factor 3, 2 min in sync replicas. In
    > many
    > > > > cases
    > > > > > > per
    > > > > > >    table or per database configuration overrides will be useful
    > > too.
    > > > > > >
    > > > > > > If producer and consumer are able to verify topic configuration
    > on
    > > > > > startup
    > > > > > > would be really useful. A spec would be great way to document 
the
    > > > > intent
    > > > > > of
    > > > > > > the code. A lot of silly (but quite hard to pin down) production
    > > > issues
    > > > > > > could have been prevented by having producer to fail fast on
    > > > > > misconfigured
    > > > > > > topics.
    > > > > > >
    > > > > > > To add to the auto-creation configuration tally. We do have 
topic
    > > > > > > auto-creation disabled on all our clusters.
    > > > > > >
    > > > > > > *Konstantin Zadorozhny*
    > > > > > > www.tubemogul.com
    > > > > > >
    > > > > > > On Wed, Jun 29, 2016 at 11:17 AM, Roger Hoover <
    > > > roger.hoo...@gmail.com
    > > > > >
    > > > > > > wrote:
    > > > > > >
    > > > > > > > My comments go a bit beyond just topic creation but I'd like 
to
    > > see
    > > > > > Kafka
    > > > > > > > make it easier for application developers to specify their
    > > > > requirements
    > > > > > > > declaratively in a single place.  Today, for example, if your
    > > > > > application
    > > > > > > > requires strong guarantees against data loss, you must set a
    > mix
    > > of
    > > > > > > > topic-level configs (replication factor, min.in.sync.replicas,
    > > > > > > > retention.ms)
    > > > > > > > and client configs (acks=all and
    > > > > > > > possibly max.in.flight.requests.per.connection if you care
    > about
    > > > > > > > ordering).  This can be complicated by organizational 
structure
    > > > where
    > > > > > you
    > > > > > > > have a different team (SREs) responsible for the cluster
    > configs
    > > > and
    > > > > > > > perhaps topic creation and application teams responsible for
    > the
    > > > > client
    > > > > > > > settings.  Let's say that you get all the settings right up
    > > front.
    > > > > How
    > > > > > > > would you know if they later were changed incorrectly?  How do
    > > > admins
    > > > > > > know
    > > > > > > > which topics are ok to add more partitions are which are not?
    > > How
    > > > do
    > > > > > > > downstream applications know how much retention they can rely
    > on
    > > > for
    > > > > > > > re-processing in their upstream topics.
    > > > > > > >
    > > > > > > > I think it's useful to consider the typical roles in an
    > > > organization.
    > > > > > > Say
    > > > > > > > we have an SRE team responsible for overall cluster health,
    > > > capacity,
    > > > > > > etc.
    > > > > > > > This team likely has elevated privileges and perhaps wants to
    > > > > > > > review/approve settings for new topics to make sure they're
    > sane.
    > > > > > > >
    > > > > > > > The application developer may not care about some of the
    > details
    > > of
    > > > > > topic
    > > > > > > > creation but does care in as much as they affect the
    > application
    > > > > > > > correctness and SLAs.  It's more than just number of 
partitions
    > > and
    > > > > > > > replication factor.  The application may require
    > > > > > > > 1) some of it's topics to be compacted to function correctly
    > and
    > > > > > > > min.compaction.lag.ms (KIP-58) set correctly
    > > > > > > > 2) retention.ms set correctly on some of it's topics to
    > satisfy
    > > > it's
    > > > > > > > failure/re-processing SLAs
    > > > > > > > 3) partitioning of it's input topics to match it's 
expectations
    > > > > > > > 4) the data format to match expectations
    > > > > > > >
    > > > > > > > I realize that #3 and #4 are unrelated to topic creation but
    > > > they're
    > > > > > part
    > > > > > > > of a set of invariants that the application needs enforced and
    > > > should
    > > > > > > fail
    > > > > > > > early if their requirements are not met.  For example, with
    > > > > > semantically
    > > > > > > > partitioned topics, the application may break if new 
partitions
    > > are
    > > > > > > added.
    > > > > > > > The issue is that there is no standard mechanism or convention
    > to
    > > > > > > > communicate application requirements so that admins and
    > > application
    > > > > > teams
    > > > > > > > can verify that they continue to be met over time.
    > > > > > > >
    > > > > > > > Imagine for a second that Kafka allowed arbitrary tags to be
    > > > > associated
    > > > > > > to
    > > > > > > > topics.  An application could now define a specification for
    > it's
    > > > > > > > interaction with Kafka including topic names, min replication
    > > > > factors,
    > > > > > > > fault tolerance settings (replication factors,
    > > > min.in.sync.replicas,
    > > > > > > > producer acks), compacted yes/no, topic retention settings, 
can
    > > > > > > add/remove
    > > > > > > > partitions, partition key, and data format.  Some of these
    > > > > requirements
    > > > > > > map
    > > > > > > > onto topics configs and some (like acks=all) are producer
    > > settings
    > > > > and
    > > > > > > some
    > > > > > > > (like partition key and data format) could be organizational
    > > > > > conventions
    > > > > > > > stored as tags (format:avro).
    > > > > > > >
    > > > > > > > For organizations where only SREs/admins can create/modify
    > > topics,
    > > > > this
    > > > > > > > spec allows them to do their job while being sure they're not
    > > > > breaking
    > > > > > > the
    > > > > > > > application.  The application can verify on startup that it's
    > > > > > > requirements
    > > > > > > > are satisfied and fail early if not.  If the application has
    > > > > > permissions
    > > > > > > to
    > > > > > > > create it's own topics then the spec is a declarative format
    > for
    > > > > doing
    > > > > > > that
    > > > > > > > require and will not require the same topic creation
    > boilerplate
    > > > code
    > > > > > to
    > > > > > > be
    > > > > > > > duplicated in every application.
    > > > > > > >
    > > > > > > > If people like this approach, perhaps we could define a topic
    > > spec
    > > > > (if
    > > > > > > all
    > > > > > > > fields besides topic name are empty it use "cluster 
defaults").
    > > > Then
    > > > > > the
    > > > > > > > AdminClient would have an idempotent create method that takes 
a
    > > > spec
    > > > > > and
    > > > > > > > verifies that the spec is already met, tries to create topics
    > to
    > > > meet
    > > > > > the
    > > > > > > > spec, or fails saying it cannot be met.  Perhaps the producer
    > and
    > > > > > > consumer
    > > > > > > > APIs would only have a verify() method which checks if the 
spec
    > > is
    > > > > > > > satisfied.
    > > > > > > >
    > > > > > > > Cheers,
    > > > > > > >
    > > > > > > > Roger
    > > > > > > >
    > > > > > > > On Wed, Jun 29, 2016 at 8:50 AM, Grant Henke <
    > > ghe...@cloudera.com>
    > > > > > > wrote:
    > > > > > > >
    > > > > > > > > Thanks for the discussion, below are some thoughts and
    > > responses.
    > > > > > > > >
    > > > > > > > > One of the problems that we currently have with
    > > > > > > > > > the clients is that we retry silently on unknown topics
    > under
    > > > the
    > > > > > > > > > expectation that they will eventually be created
    > > (automatically
    > > > > or
    > > > > > > > not).
    > > > > > > > > > This makes it difficult to detect misconfiguration without
    > > > > looking
    > > > > > > for
    > > > > > > > > > warnings in the logs. This problem is compounded if the
    > > client
    > > > > > isn't
    > > > > > > > > > authorized to the topic since then we don't actually know
    > if
    > > > the
    > > > > > > topic
    > > > > > > > > > exists or not and whether it is reasonable to keep
    > retrying.
    > > > > > > > >
    > > > > > > > >
    > > > > > > > > Yeah this is a problem thats difficult and opaque to the
    > user.
    > > I
    > > > > > think
    > > > > > > > any
    > > > > > > > > of the proposed solutions would help solve this issue. Since
    > > the
    > > > > > create
    > > > > > > > > would be done at the metadata request phase, instead of in
    > the
    > > > > > produce
    > > > > > > > > response handling. And if the create fails, the user would
    > > > receive
    > > > > a
    > > > > > > > munch
    > > > > > > > > more clear authorization error.
    > > > > > > > >
    > > > > > > > > The current auto creation of topic by the broker appear to 
be
    > > the
    > > > > > only
    > > > > > > > > > reason an unknown topic error is retriable
    > > > > > > > > > which leads to bugs (like
    > > > > > > > > https://issues.apache.org/jira/browse/KAFKA-3727
    > > > > > > > > > ) where the consumer hangs forever (or until woken up) and
    > > only
    > > > > > debug
    > > > > > > > > > tracing shows what's going on.
    > > > > > > > > >
    > > > > > > > >
    > > > > > > > > I agree this is related, but should be solvable even with
    > > > retriable
    > > > > > > > > exceptions. I think UnknownTopicOrPartitionException needs 
to
    > > > > remain
    > > > > > > > > generally retriable because it could occur due to outdated
    > > > metadata
    > > > > > and
    > > > > > > > not
    > > > > > > > > because a topic needs to be created. In the case of message
    > > > > > production
    > > > > > > or
    > > > > > > > > consumption it could be explicitly handled differently in 
the
    > > > > client.
    > > > > > > > >
    > > > > > > > > Do we clearly define the expected behavior of subscribe and
    > > > assign
    > > > > in
    > > > > > > the
    > > > > > > > > case of a missing topic? I can see reasons to fail early
    > > > (partition
    > > > > > > will
    > > > > > > > > never exist, typo in topic name) and reasons to keep
    > returning
    > > > > empty
    > > > > > > > record
    > > > > > > > > sets until the topic exists (consumer with a preconfigured
    > list
    > > > of
    > > > > > > topics
    > > > > > > > > that may or may not exist). Though I think failing and
    > > insisting
    > > > > > topics
    > > > > > > > > exist is the most predictable. Especially since the Admin 
API
    > > > will
    > > > > > make
    > > > > > > > > creating topics easier.
    > > > > > > > >
    > > > > > > > > Usually in the pre-prod environments you don't really
    > > > > > > > > > care about the settings at all, and in prod you can
    > > > > pre-provision.
    > > > > > > > >
    > > > > > > > >
    > > > > > > > > I like the recommendations, developer/ops experience and
    > > required
    > > > > > > > exercises
    > > > > > > > > to be fairly consistent between dev, qa, and prod. If you
    > need
    > > to
    > > > > > > > > pre-provision and think about the settings in prod. Its best
    > to
    > > > put
    > > > > > > some
    > > > > > > > > effort into building that logic in dev or qa too. Otherwise
    > you
    > > > get
    > > > > > > ready
    > > > > > > > > to deploy and everything changes and all your earlier 
testing
    > > is
    > > > > not
    > > > > > as
    > > > > > > > > relevant.
    > > > > > > > >
    > > > > > > > > For what it's worth the use case for auto-creation isn't
    > using
    > > a
    > > > > > > dynamic
    > > > > > > > > > set of topics, but rather letting apps flow through
    > different
    > > > > > > > > > dev/staging/prod/integration_testing/unit_testing
    > > environments
    > > > > > > without
    > > > > > > > > > having the app configure appropriate
    > replication/partitioning
    > > > > stuff
    > > > > > > in
    > > > > > > > > each
    > > > > > > > > > environment and having complex logic to check if the topic
    > is
    > > > > > there.
    > > > > > > > > >
    > > > > > > > >
    > > > > > > > > The problem I have seen here is that the cluster default is
    > > > global,
    > > > > > at
    > > > > > > > > least until we have some concept of namespaces and can
    > > configure
    > > > > > > defaults
    > > > > > > > > for each. Since picking a good number of partitions varies
    > > based
    > > > on
    > > > > > > > volume,
    > > > > > > > > use case, etc a default that works for most topics is a hard
    > to
    > > > > find.
    > > > > > > > >
    > > > > > > > > I feel like because app developers think they don't need to
    > > think
    > > > > > about
    > > > > > > > > topic creation, often they don't. And that leads to a mess
    > > where
    > > > > they
    > > > > > > > don't
    > > > > > > > > know how may partitions and what replication factor they
    > have.
    > > > > > Instead
    > > > > > > > > migrating environments with a setup script that creates the
    > > > needed
    > > > > > > topics
    > > > > > > > > allows them to source control those setting and create
    > > > predictable,
    > > > > > > > > repeatable deployments.
    > > > > > > > >
    > > > > > > > > I have also seen a lot of issues where users are confused
    > about
    > > > > why a
    > > > > > > > topic
    > > > > > > > > is coming back or can't be deleted. This is often a result
    > > > > > > > > of auto.create.topics.enable being defaulted to true. And
    > they
    > > > > never
    > > > > > > > expect
    > > > > > > > > that a feature like that would exist, much less be the
    > default.
    > > > > > > > >
    > > > > > > > > On a side note, the best dynamic use case I could think of 
is
    > > > > > > > MirrorMaker.
    > > > > > > > > But the cluster defaults here don't really work since its
    > they
    > > > are
    > > > > > not
    > > > > > > > very
    > > > > > > > > flexible. Pushing creation to the client would allow tools
    > like
    > > > > > > > MirrorMaker
    > > > > > > > > to create topics that match the upstream cluster, or provide
    > > its
    > > > > own
    > > > > > > > logic
    > > > > > > > > for sizing downstream topics.
    > > > > > > > >
    > > > > > > > > This raises an important point about how we handle defaults,
    > > > which
    > > > > I
    > > > > > > > don't
    > > > > > > > > > think we talked about. I do think it is really important
    > that
    > > > we
    > > > > > > allow
    > > > > > > > a
    > > > > > > > > > way to create topics with the "cluster defaults". I know
    > this
    > > > is
    > > > > > > > possible
    > > > > > > > > > for configs since if you omit them they inherit default
    > > values,
    > > > > > but I
    > > > > > > > > think
    > > > > > > > > > we should be able to do it with replication factor and
    > > > partition
    > > > > > > count
    > > > > > > > > too.
    > > > > > > > > > I think the Java API should expose this and maybe even
    > > > encourage
    > > > > > it.
    > > > > > > > > >
    > > > > > > > >
    > > > > > > > > We could make the create topic request num_partitions and
    > > > > > > > > replication_factor fields optional and if unset use the
    > cluster
    > > > > > > defaults.
    > > > > > > > > This allows a user to opt into the cluster defaults at 
create
    > > > > time. I
    > > > > > > > have
    > > > > > > > > rarely seen good defaults set in my experience though,
    > > especially
    > > > > > since
    > > > > > > > the
    > > > > > > > > default is 1 in both cases.
    > > > > > > > >
    > > > > > > > > I kind of feel once you start adding AdminClient methods to
    > the
    > > > > > > producer
    > > > > > > > > > and consumer it's not really clear where to stop--e.g. if 
I
    > > can
    > > > > > > create
    > > > > > > > I
    > > > > > > > > > should be able to delete, list, etc.
    > > > > > > > >
    > > > > > > > >
    > > > > > > > > I agree this gets weird and could lead to duplicate client
    > code
    > > > and
    > > > > > > > > inconsistent behavior across clients. The one thing I don't
    > > like
    > > > > > about
    > > > > > > > > requiring a separate client is it maintains all its own
    > > > connections
    > > > > > and
    > > > > > > > > metadata. Perhaps sometime down the road if we see a lot of
    > > mixed
    > > > > > usage
    > > > > > > > we
    > > > > > > > > could break out the core cluster connection code into a
    > > > > > KafkaConnection
    > > > > > > > > class and instantiate clients with that. That way clients
    > could
    > > > > share
    > > > > > > the
    > > > > > > > > same KafkaConnection.
    > > > > > > > >
    > > > > > > > > Thanks,
    > > > > > > > > Grant
    > > > > > > > >
    > > > > > > > >
    > > > > > > > > On Wed, Jun 29, 2016 at 9:29 AM, Jay Kreps 
<j...@confluent.io
    > >
    > > > > wrote:
    > > > > > > > >
    > > > > > > > > > For what it's worth the use case for auto-creation isn't
    > > using
    > > > a
    > > > > > > > dynamic
    > > > > > > > > > set of topics, but rather letting apps flow through
    > different
    > > > > > > > > > dev/staging/prod/integration_testing/unit_testing
    > > environments
    > > > > > > without
    > > > > > > > > > having the app configure appropriate
    > replication/partitioning
    > > > > stuff
    > > > > > > in
    > > > > > > > > each
    > > > > > > > > > environment and having complex logic to check if the topic
    > is
    > > > > > there.
    > > > > > > > > > Basically if you leave this up to individual apps you get
    > > kind
    > > > > of a
    > > > > > > > mess,
    > > > > > > > > > it's better to have cluster defaults that are reasonable
    > and
    > > > > > > controlled
    > > > > > > > > by
    > > > > > > > > > an admin and then pre-provision anything that is weird
    > (super
    > > > > big,
    > > > > > > > > unusual
    > > > > > > > > > perms, whatever). Usually in the pre-prod environments you
    > > > don't
    > > > > > > really
    > > > > > > > > > care about the settings at all, and in prod you can
    > > > > pre-provision.
    > > > > > > > > >
    > > > > > > > > > This raises an important point about how we handle
    > defaults,
    > > > > which
    > > > > > I
    > > > > > > > > don't
    > > > > > > > > > think we talked about. I do think it is really important
    > that
    > > > we
    > > > > > > allow
    > > > > > > > a
    > > > > > > > > > way to create topics with the "cluster defaults". I know
    > this
    > > > is
    > > > > > > > possible
    > > > > > > > > > for configs since if you omit them they inherit default
    > > values,
    > > > > > but I
    > > > > > > > > think
    > > > > > > > > > we should be able to do it with replication factor and
    > > > partition
    > > > > > > count
    > > > > > > > > too.
    > > > > > > > > > I think the Java API should expose this and maybe even
    > > > encourage
    > > > > > it.
    > > > > > > > > >
    > > > > > > > > > I don't have a super strong opinion on how this is 
exposed,
    > > > > though
    > > > > > I
    > > > > > > > kind
    > > > > > > > > > of prefer one of two options:
    > > > > > > > > > 1. Keep the approach we have now with a config option to
    > > allow
    > > > > auto
    > > > > > > > > create,
    > > > > > > > > > but using this option just gives you a plain vanilla topic
    > > with
    > > > > no
    > > > > > > > custom
    > > > > > > > > > configs, for anything custom you need to use AdminClient
    > > > > "manually"
    > > > > > > > > > 2. Just throw an exception and let you use AdminClient.
    > This
    > > > may
    > > > > > be a
    > > > > > > > bit
    > > > > > > > > > of a transition for people relying on the current 
behavior.
    > > > > > > > > >
    > > > > > > > > > I kind of feel once you start adding AdminClient methods 
to
    > > the
    > > > > > > > producer
    > > > > > > > > > and consumer it's not really clear where to stop--e.g. if 
I
    > > can
    > > > > > > create
    > > > > > > > I
    > > > > > > > > > should be able to delete, list, etc.
    > > > > > > > > >
    > > > > > > > > > -Jay
    > > > > > > > > >
    > > > > > > > > > On Tue, Jun 28, 2016 at 9:26 AM, Grant Henke <
    > > > > ghe...@cloudera.com>
    > > > > > > > > wrote:
    > > > > > > > > >
    > > > > > > > > > > With the KIP-4 create topic schema voted and passed and 
a
    > > PR
    > > > > > > > available
    > > > > > > > > > > upstream. I wanted to discuss moving the auto topic
    > > creation
    > > > > from
    > > > > > > the
    > > > > > > > > > > broker side to the client side (KAFKA-2410
    > > > > > > > > > > <https://issues.apache.org/jira/browse/KAFKA-2410>).
    > > > > > > > > > >
    > > > > > > > > > > This change has many benefits
    > > > > > > > > > >
    > > > > > > > > > >    - Remove the need for failed messages until a topic 
is
    > > > > created
    > > > > > > > > > >    - Client can define the auto create parameters 
instead
    > > of
    > > > a
    > > > > > > global
    > > > > > > > > > >    cluster setting
    > > > > > > > > > >    - Errors can be communicated back to the client more
    > > > clearly
    > > > > > > > > > >
    > > > > > > > > > > Overall auto create is not my favorite feature, since
    > topic
    > > > > > > creation
    > > > > > > > > is a
    > > > > > > > > > > highly critical piece for Kafka, and with authorization
    > > added
    > > > > it
    > > > > > > > > becomes
    > > > > > > > > > > even more involved. When creating a topic a user needs:
    > > > > > > > > > >
    > > > > > > > > > >    - The access to create topics
    > > > > > > > > > >    - To set the correct partition count and replication
    > > > factor
    > > > > > for
    > > > > > > > > their
    > > > > > > > > > >    use case
    > > > > > > > > > >    - To set who has access to the topic
    > > > > > > > > > >    - Knowledge of how a new topic may impact regex
    > > consumers
    > > > or
    > > > > > > > > > mirrormaker
    > > > > > > > > > >
    > > > > > > > > > > Often I find use cases that look like they need auto
    > topic
    > > > > > > creation,
    > > > > > > > > can
    > > > > > > > > > > often be handled with a few pre made topics. That said,
    > we
    > > > > still
    > > > > > > > should
    > > > > > > > > > > support the feature for the cases that need it
    > > (mirrormaker,
    > > > > > > > streams).
    > > > > > > > > > >
    > > > > > > > > > > The question is how we should expose auto topic creation
    > in
    > > > the
    > > > > > > > > client. A
    > > > > > > > > > > few options are:
    > > > > > > > > > >
    > > > > > > > > > >    - Add configs like the broker configs today, and let
    > the
    > > > > > client
    > > > > > > > > > >    automatically create the topics if enabled
    > > > > > > > > > >       - Both producer and consumer?
    > > > > > > > > > >    - Throw an error to the user and let them use a
    > separate
    > > > > > > > AdminClient
    > > > > > > > > > >    (KIP-4) api to create the topic
    > > > > > > > > > >    - Throw an error to the user and add a create api to
    > the
    > > > > > > producer
    > > > > > > > so
    > > > > > > > > > >    they can easily handle by creating a topic
    > > > > > > > > > >
    > > > > > > > > > > I am leaning towards the last 2 options but wanted to 
get
    > > > some
    > > > > > > others
    > > > > > > > > > > thoughts on the matter. Especially if you have use cases
    > > that
    > > > > use
    > > > > > > > auto
    > > > > > > > > > > topic creation today.
    > > > > > > > > > >
    > > > > > > > > > > Thanks,
    > > > > > > > > > > Grant
    > > > > > > > > > >
    > > > > > > > > > > --
    > > > > > > > > > > Grant Henke
    > > > > > > > > > > Software Engineer | Cloudera
    > > > > > > > > > > gr...@cloudera.com | twitter.com/gchenke |
    > > > > > > > linkedin.com/in/granthenke
    > > > > > > > > > >
    > > > > > > > > >
    > > > > > > > >
    > > > > > > > >
    > > > > > > > >
    > > > > > > > > --
    > > > > > > > > Grant Henke
    > > > > > > > > Software Engineer | Cloudera
    > > > > > > > > gr...@cloudera.com | twitter.com/gchenke |
    > > > > > linkedin.com/in/granthenke
    > > > > > > > >
    > > > > > > >
    > > > > > >
    > > > > >
    > > > > >
    > > > > >
    > > > > > --
    > > > > > Grant Henke
    > > > > > Software Engineer | Cloudera
    > > > > > gr...@cloudera.com | twitter.com/gchenke |
    > > linkedin.com/in/granthenke
    > > > > >
    > > > >
    > > >
    > >
    >
    >
    >
    >
    


Reply via email to