在实例化KafkaProducer

时间:2016-05-01 00:57:37

标签: apache-kafka ibm-cloud websphere-liberty message-hub

我正在使用Kafka Broker的IBM Bluemix实现。

我正在创建具有以下属性的KafkaProducer:

key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
bootstrap.servers=xxxx.xxxxxx.xxxxxx.xxxxxx.bluemix.net:xxxx
client.id=messagehub
acks=-1
security.protocol=SASL_SSL
ssl.protocol=TLSv1.2
ssl.enabled.protocols=TLSv1.2
ssl.truststore.location=xxxxxxxxxxxxxxxxx
ssl.truststore.password=xxxxxxxx
ssl.truststore.type=JKS
ssl.endpoint.identification.algorithm=HTTPS

KafkaProducer<byte[], byte[]> kafkaProducer = 
           new KafkaProducer<byte[], byte[]>(props);

有了这个,我得到了以下例外:

  

org.apache.kafka.common.KafkaException:   org.apache.kafka.clients.producer.internals.DefaultPartitioner不是   org.apache.kafka.clients.producer.Partitioner的一个实例

阅读以下博客后: http://blog.rocana.com/kafkas-defaultpartitioner-and-byte-arrays我将以下行添加到我的属性文件中,即使我使用的是新API:

partitioner.class=kafka.producer.ByteArrayPartitioner 

现在我得到了这个例外:

  

org.apache.kafka.common.KafkaException:无法实例化类   kafka.producer.ByteArrayPartitioner它是否有公共无参数   构造

看起来ByteArrayPartitioner没有默认构造函数。 知道我在这里缺少什么吗?

由于 马杜

1 个答案:

答案 0 :(得分:0)

当我使用KafkaProducer API时,我不需要

partitioner.class=kafka.producer.ByteArrayPartitioner 

属性。问题是有2个kafkaclient jar副本。我们已经配置了我们的安装,所有库jar文件都在外部共享目录中。但是由于POM配置错误,war文件在其lib目录中也有一个kafka客户端的副本。一旦我解决了这个问题,它就运行良好。

Madhu