Jason,

In 0.8, producer doesn't use zkclient at all. You just need to set
broker.list. A number of things have changed In 0.8. First, number of
partitions of a topic is global in a cluster and they don't really change
as new brokers are added. Second, a partition is assigned to multiple
brokers for replication and one of the replicas is the leader which serves
writes. When a producer starts up, it first uses the getMetadata api to
figure out the replica assignment for the relevant topic/partition. It then
issues producer request directly the broker where the leader resides. If
the leader broker goes down, the producer gets an exception and it will
re-issue the getMetadata api to obtain the information about the new leader.

Thanks,

Jun

On Mon, Nov 19, 2012 at 1:29 PM, Jason Rosenberg <j...@squareup.com> wrote:

> Well, they do use zk though, to get the initial list of kafka nodes, and
> while zk is available, presumably they do use it to keep up with the
> dynamically changing set of kafka brokers, no?  You are just saying that if
> zk goes away, 0.8 producers can keep on producing, as long as the kafka
> cluster remains stable?
>
> Jason
>
> On Mon, Nov 19, 2012 at 12:20 PM, Neha Narkhede <neha.narkh...@gmail.com
> >wrote:
>
> > In 0.8, producers don't use zk. When producers encounter an error
> > while sending data, they use a special getMetadata request to refresh
> > the kafka cluster info from a randomly selected Kafka broker, and
> > retry sending the data.
> >
> > Thanks,
> > Neha
> >
> > On Mon, Nov 19, 2012 at 12:10 PM, Jason Rosenberg <j...@squareup.com>
> > wrote:
> > > Are you saying that in 0.8, producers don't use zkclient?  Or don't
> need
> > > it?  How can a producer dynamically respond to a change in the kafka
> > > cluster without zk?
> > >
> > > On Mon, Nov 19, 2012 at 8:07 AM, Jun Rao <jun...@gmail.com> wrote:
> > >
> > >> Jae,
> > >>
> > >> In 0.8, producers don't need ZK client anymore. Instead, it uses a new
> > >> getMetadata api to get topic/partition/leader information from the
> > broker.
> > >> Consumers still need ZK client. We plan to redesign the consumer post
> > 0.8
> > >> and can keep this in mind.
> > >>
> > >> Thanks,
> > >>
> > >> Jun
> > >>
> > >> On Sun, Nov 18, 2012 at 10:35 PM, Bae, Jae Hyeon <metac...@gmail.com>
> > >> wrote:
> > >>
> > >> > I want to suggest kafka should create only one instance of ZkClient
> > >> > globally because ZkClient is thread safe and it will make many users
> > >> > easily customize kafka source code for Zookeeper.
> > >> >
> > >> > In our company's cloud environment, it is not recommended to create
> > >> > ZkClient from zkConnect string directly because zookeeper cluster
> can
> > >> > be dynamically changing. So, I have to create ZkClient using our
> > >> > company's own platform library. Because of this requirement, I can't
> > >> > use kafka jar file directly. I can modify and build kafka source
> code
> > >> > but I have to repeat this work whenever I update kafka version,
> pretty
> > >> > annoying.
> > >> >
> > >> > So, my suggestion is, let me pass ZkClient outs of Producer,
> Consumer,
> > >> > and Broker, as the following example.
> > >> >
> > >> > Producer<String, String> producer =
> > >> >
> > >> >
> > >>
> >
> ProducerBuilder.withZkClient(zkClient).build<String,String>(producerConfig);
> > >> >
> > >> > ConsumerConnector connector =
> > >> > Consumer.withZkClient(zkClient).createJavaConsumerConnector(new
> > >> > ConsumerConfig(consumerProps));
> > >> >
> > >> > KafkaServer is a little more complicated but I believe without much
> > >> > effort we can refactor KafkaServer to be customized with ZkClient.
> > >> >
> > >> > I really appreciate if this suggestion is accepted and merged to
> 0.8.
> > >> > If you want me to contribute with this suggestion, please let me
> know
> > >> > your opinion. If you are positive with this idea, I will contribute
> > >> > very happily.
> > >> >
> > >> > Thank you
> > >> > Best, Jae
> > >> >
> > >>
> >
>

Reply via email to