[solved]. zkClient needs a serializer. This is the final code:
ZkClient zkClient = new ZkClient(zookeeperCluster, 30000, 30000);
zkClient.setZkSerializer(new ZkSerializer() {
@Override
public byte[] serialize(Object o)
throws ZkMarshallingError
{
return ZKStringSerializer.serialize(o);
}
@Override
public Object deserialize(byte[] bytes)
throws ZkMarshallingError
{
return ZKStringSerializer.deserialize(bytes);
}
});
CreateTopicCommand.createTopic(zkClient, topic, numPartitions.intValue(),
replicationFactor.intValue(), "");
zkClient.close();
Regards.
2014-02-25 18:50 GMT+01:00 David Morales de Frías <
[email protected]>:
> Nope... i have checked this and replication factor is 1. Anyway, when i
> tried to increase this param, an exception is thrown (rep. factor greater
> than num. of brokers).
>
> There is no difference in this code and the script, apparently, i can only
> see changes in the constructor used in zkClient.
>
> Any clue?
>
>
> Thanks.
>
>
> 2014-02-25 18:41 GMT+01:00 Neha Narkhede <[email protected]>:
>
> David,
>>
>> Topic creation can fail if you specify the replication factor > # of
>> brokers in the cluster. Can you check if that is true in your case?
>> Unfortunately, I don't think we fail the createTopic() API with the
>> appropriate exception since there is still a race condition where the
>> broker can come up after you do the check and before you throw the
>> exception. We are trying to fix this behavior in one of the upcoming
>> releases to let topic creation succeed even if the # of live brokers in
>> the
>> cluster is less than the replication factor at topic creation time.
>>
>> Thanks,
>> Neha
>>
>>
>> On Tue, Feb 25, 2014 at 8:39 AM, David Morales de Frías <
>> [email protected]> wrote:
>>
>> > This is the code that i can see in CreateTopicCommand
>> >
>> >
>> > var zkClient: ZkClient = null
>> > try {
>> > zkClient = new ZkClient(zkConnect, 30000, 30000,
>> ZKStringSerializer)
>> > createTopic(zkClient, topic, nPartitions, replicationFactor,
>> > replicaAssignmentStr)
>> > println("creation succeeded!")
>> > } catch {
>> > case e: Throwable =>
>> > println("creation failed because of " + e.getMessage)
>> > println(Utils.stackTrace(e))
>> > } finally {
>> > if (zkClient != null)
>> > zkClient.close()
>> > }
>> >
>> >
>> > Mine is *ZkClient zkClient = new ZkClient(zookeeperCluster, 30000,
>> 30000);*
>> >
>> >
>> >
>> > Thanks
>> >
>> >
>> >
>> > 2014-02-25 17:25 GMT+01:00 Jun Rao <[email protected]>:
>> >
>> > > Is the ZK connection string + namespace the same btw the code and the
>> > > script?
>> > >
>> > > Thanks,
>> > >
>> > > Jun
>> > >
>> > >
>> > > On Tue, Feb 25, 2014 at 3:01 AM, David Morales de Frías <
>> > > [email protected]> wrote:
>> > >
>> > > > Hi there,
>> > > >
>> > > > I'm trying to create a topic from java code, by calling
>> > > CreateTopicCommand:
>> > > >
>> > > >
>> > > > *ZkClient zkClient = new ZkClient(zookeeperCluster, 30000, 30000);*
>> > > >
>> > > > *CreateTopicCommand.createTopic(zkClient, topic,
>> > > > numPartitions.intValue(),replicationFactor.intValue(), "");*
>> > > >
>> > > > *zkClient.close();*
>> > > >
>> > > >
>> > > > The program runs without errors and even if i call it twice, the
>> second
>> > > > time i receive an exception telling me that this topic already
>> exists.
>> > > >
>> > > > But, if run a list-topics, the topic doesn't appear... and there is
>> no
>> > > > folder under kafka-logs
>> > > >
>> > > > If i want to create it by using the create-topic script, it prints
>> that
>> > > the
>> > > > topic already exists¡
>> > > >
>> > > > Any idea about that?
>> > > >
>> > > >
>> > > >
>> > > > Regards.
>> > > >
>> > >
>> >
>>
>
>