SchemaException-读取字段'leader_id'时出错:字符串长度-1不能为负-Azure事件中心-Kafka

时间:2019-02-17 15:19:34

标签: apache-kafka azure-eventhub

我遇到了这个异常

org.apache.kafka.common.protocol.types.SchemaException

kafka重新平衡时

这些是详细信息:

  1. 使用Azure事件中心。使用kafka API

  2. 访问它
  3. “已启用Kafka” =是,在azure门户中

  4. 使用:编译组:'org.apache.kafka',名称:'kafka-clients',版本:'1.0.2'

  5. 使用消费群

  6. Properties properties = new Properties();
    properties.put(SaslConfigs.SASL_MECHANISM, "PLAIN");
    properties.put(SaslConfigs.SASL_JAAS_CONFIG, saslJaasConfig);
    properties.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_SSL");
    properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, String.format("%s.servicebus.windows.net:9093", this.namespace));
    properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, LongDeserializer.class.getName());
    properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, MeasurementDeSerializer.class.getName());
    properties.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, 120000);
    properties.put(ConsumerConfig.GROUP_ID_CONFIG, this.groupName);
    properties.put(ConsumerConfig.CLIENT_ID_CONFIG, clientId);
    

我在2台不同的PC上有2个客户端

当它们都运行时,每个都从可用的32个分区中获得16个分区。

当我关闭其中一个零件时,所有零件都重新平衡到另一个零件上。

在仍在运行的实例上,我将得到:

  1. 已撤销分区[16、17、18、19、20、21、22、23、24、25、26、27、28、29、30、31]

  2. 然后,从池循环中,我将收到此异常:

    org.apache.kafka.common.protocol.types.SchemaException:读取字段“ leader_id”时出错:字符串长度-1不能为负         在org.apache.kafka.common.protocol.types.Schema.read(Schema.java:76)         在org.apache.kafka.common.protocol.ApiKeys.parseResponse(ApiKeys.java:279)         在org.apache.kafka.clients.NetworkClient.parseStructMaybeUpdateThrottleTimeMetrics(NetworkClient.java:586)         在org.apache.kafka.clients.NetworkClient.handleCompletedReceives(NetworkClient.java:686)         在org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:469)         在org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:258)         在org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:230)         在org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:190)         在org.apache.kafka.clients.consumer.internals.AbstractCoordinator.joinGroupIfNeeded(AbstractCoordinator.java:364)         在org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureActiveGroup(AbstractCoordinator.java:316)         在org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.java:295)         在org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1146)         在org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1111)

反之,则没有问题

  1. 启动第一个实例

  2. 实例1获得全部32个分区

  3. 启动实例2

  4. 重新平衡开始

  5. 实例1丢失了16个部分

  6. 实例2获得16个部分

您知道什么会导致此异常吗?

1 个答案:

答案 0 :(得分:0)

对于将来的读者-问题已解决。 https://github.com/Azure/azure-event-hubs-for-kafka/issues/41