ClassCastException: kafka.message.Message не может быть приведен к java.lang.String на kafka Producer

Я пытаюсь написать какой-нибудь простой производитель, который пишет сообщения в kafka. Я скачал kafka0.7.

Запустите сервер kafka, производителя и потребителя

>   bin/kafka-server-start.sh config/server.properties
>   bin/kafka-console-consumer.sh --zookeeper zooserver:2181 --topic test --from-beginning
>   bin/kafka-console-producer.sh --zookeeper zooserver:2181 --topic test

И все работает!

Затем я создал простой Consumer , и он тоже работает.

SimpleConsumer consumer = new SimpleConsumer("172.21.110.134", 9092, 10000, 1024000);
…
ByteBufferMessageSet messages = consumer.fetch(fetchRequest);
System.out.println("consumed: " + Utils.toString(msg.message().payload(), "UTF-8"));

Но следующий производитель всегда выдает ошибку

ProducerConfig config = new ProducerConfig(props);
…
Producer<String, Message> producer = new Producer<String, Message>(config);
producer.send(new ProducerData<String, Message>("test", new Message("Hello World".getBytes())));

Получение следующего исключения

Exception in thread "main" java.lang.ClassCastException: kafka.message.Message cannot be cast to java.lang.String
            at kafka.serializer.StringEncoder.toMessage(Encoder.scala:30)
            at kafka.producer.ProducerPool$$anonfun$send$1$$anonfun$3$$anonfun$apply$1.apply(ProducerPool.scala:107)

Я использую в java-коде зависимости maven

<dependency>
      <groupId>com.twitter</groupId>
         <artifactId>kafka_2.9.2</artifactId>
         <version>0.7.0</version>
     </dependency>

    <dependency>
         <groupId>org.scala-lang</groupId>
         <artifactId>scala-library</artifactId>
         <version>2.9.2</version>
     </dependency>

Помогите пожалуйста, что я делаю не так? Почему я не могу писать с помощью простого кода Java?


person Julias    schedule 20.06.2013    source источник


Ответы (1)


Проблема в том, что вы настроили неправильный сериализатор, это должно быть

props.put("serializer.class", "kafka.serializer.DefaultEncoder");

Не "StringEncoder"

person om-nom-nom    schedule 20.06.2013