在Kafka中读取字段'topic_metadata'时出错

时间:2016-05-28 06:21:29

标签: apache-kafka kafka-producer-api

我正在尝试使用auto.create.topics.enable = true在我的server.properties文件中连接到我的代理。但是当我尝试使用Java客户端生产者连接到代理时,我得到以下<ion-row>

  

1197 [kafka-producer-network-thread | producer-1]错误   org.apache.kafka.clients.producer.internals.Sender - 未捕获的错误   kafka生产者I / O线程:   org.apache.kafka.common.protocol.types.SchemaException:读取错误   字段'topic_metadata':读取大小为619631的数组时出错,仅为37   可用的字节数   org.apache.kafka.common.protocol.types.Schema.read(Schema.java:73)at   org.apache.kafka.clients.NetworkClient.parseResponse(NetworkClient.java:380)     在   org.apache.kafka.clients.NetworkClient.handleCompletedReceives(NetworkClient.java:449)     在   org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:269)     在   org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:229)     在   org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:134)     在java.lang.Thread.run(未知来源)

以下是我的客户端生产商代码。

error

有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:3)

我遇到过类似的问题。这里的问题是,当paf文件中的kafka客户端版本与kafka服务器不匹配时。                                                                                   我使用kafka客户端0.10.0.0_1但kafka服务器仍然在0.9.0.0。所以我将kafka服务器版本升级到10,问题得到了解决。

<dependency>
            <groupId>org.apache.servicemix.bundles</groupId>
            <artifactId>org.apache.servicemix.bundles.kafka-clients</artifactId>
            <version>0.10.0.0_1</version>
        </dependency>            

答案 1 :(得分:1)

看起来我在客户端设置了错误的属性,而且我的server.properties文件具有不适用于我正在使用的客户端的属性。所以我决定使用maven将java客户端更改为0.9.0版。 / p>

<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>0.9.0.0</version>
</dependency>

我的server.properties文件如下所示。

broker.id=0
port=9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.cleaner.enable=false
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=9000
delete.topic.enable=true
advertised.host.name=<aws public Ip>
advertised.port=9092

我的制作人代码看起来像

    import java.util.Properties;
    import java.util.concurrent.ExecutionException;

    import org.apache.kafka.clients.producer.KafkaProducer;
    import org.apache.kafka.clients.producer.ProducerConfig;
    import org.apache.kafka.clients.producer.ProducerRecord;
    import org.apache.kafka.common.serialization.StringSerializer;
    public class HelloKafkaProducer 
     {


       public static void main(String args[]) throws InterruptedException,      ExecutionException {
        Properties props = new Properties();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"IP:9092");
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());

        KafkaProducer<String,String> producer = new KafkaProducer<String,String>(props);

        boolean sync = false;
        String topic="loader1";
        String key = "mykey";
        for(int i=0;i<1000;i++)
        {
        String value = "myvaluehasbeensent"+i+i;
        ProducerRecord<String,String> producerRecord = new ProducerRecord<String,String>(topic, key, value);
        if (sync) {
            producer.send(producerRecord).get();
        } else {
            producer.send(producerRecord);
        }
        }
        producer.close();
    }
 }

答案 2 :(得分:1)

确保使用正确的版本。让我们说你使用以下maven dependecy:

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-connector-kafka-0.8_2.10</artifactId>
  <version>${flink.version}</version>
</dependency>

所以神器等于: flink-connector-kafka-0.8_2.10

现在检查您是否使用了正确的Kafka版本:

cd /KAFKA_HOME/libs

现在找到kafka_YOUR-VERSION-sources.jar。

在我的情况下,我有 kafka_2.10-0.8.2.1-sources.jar 。所以它工作正常! :) 如果您使用不同的版本,只需更改maven dependecies或下载正确的kafka版本。

答案 3 :(得分:-2)

我通过编辑

解决了这个问题
<div class="table">
  <div class="cell">
    <p>Adressen</p>
    <p>ALKIS</p>
    <p>Liegenschaften</p>
    <p>Adressen</p>
    <p>ALKIS</p>
    <p>Liegenschaften Big enougth to fit 3 lines</p>
    <p>Adressen</p>
    <p>ALKIS</p>
    <p>Liegenschaften</p>
  </div>
</div>

<div class="table">
  <div class="cell">
    <p>Adressen</p>
    <p>ALKIS</p>
    <p>Liegenschaften</p>
    <p>Adressen</p>
    <p>ALKIS</p>
    <p>Liegenschaften Big enougth to fit 3 lines</p>
  </div>
</div>

检查您的hosts文件,如果zookeeper或其他代理的ip不在此文件中。