HI all,

What makes a message key mandatory and how to turn it off ?

I am migrating the messaging piece of a java application from activemq to kafka.
The application was publishing messages to kafka(0.9.0) with no issues while 
running on single broker on my dev machine.
After turning it into multi-broker, by enabling 2 additional brokers, now I am 
seeing error messages on all producers saying that "Error when sending message 
to topic <topic name> with key: null". The error happens on producing messages 
from Java client and for kafka-console-producer.sh too.

As a newbie I am not doing anything fancy around partitions, key and etc.

The topics were being create with the following: /opt/kafka/bin/kafka-topics.sh 
--zookeeper localhost:2181 --topic <topic name> --create

After going multi-broker I  was forced to define partitions because the command 
above starting saying "Missing required argument "[partitions]” , so the all  
topics are being create with the following:

/opt/kafka/bin/kafka-topics.sh --zookeeper localhost:2181 --topic <topic name> 
--create  --replication-factor 2 -partitions 1


Messages were being sent by :
...
ProducerRecord<String, Object> producerRecord = new ProducerRecord<String, 
Object>(topicName, message);
producer.send(producerRecord);
...

To make things working  again after the multi-broker change and the sunden 
mandatory message Key requirement  I change the code to use a ramdonUUID as the 
message key.
...
ProducerRecord<String, Object> producerRecord = new ProducerRecord<String, 
Object>(topicName,UUID.randomUUID().toString(), message);

producer.send(producerRecord);
...

After the change to multi-broker all topics were deleted, all log files were 
deleted , zookeeper entries were cleaned and topics were recreated.

Even now working fine from the java client with the UUID as the message key  it 
does not work from the command line,  it looks like from the command line there 
is no way to set the message key and the command line is critical when needed 
to do quick tests.

If none logic at the applications consuming the messages requires a key why  is 
it forcing to set a key ? The applications consuming the messages  only need to 
consume the message as they come to the topic.

Is there a way to turn off the mandatory message key on a multi-broker 
situation?

Thanks

--
IPVP

Reply via email to