【问题标题】:TimeoutException thrown when sending to topic发送到主题时抛出 TimeoutException
【发布时间】:2018-06-02 17:06:52
【问题描述】:

我已经使用 kafkatemplate bean 制作了发送者类以将有效负载发送到主题 在 SenderConfiguration 类中进行一些配置。

发件人

@Component
public class Sender {
    private static final Logger LOGGER = (Logger)  LoggerFactory.getLogger(Sender.class);

    @Autowired
    private KafkaTemplate<String, String>   kafkaTemplate;

    public void send(String topic, String payload) {
        LOGGER.info("sending payload='{}' to topic='{}'", payload, topic);

        kafkaTemplate.send(topic, "1", payload);
    }
}

, senderConfiguration

@Configuration
public class SenderConfig {

    @Value("${kafka.bootstrap-servers}")
    private String bootstrapServers;

    @Bean
    public Map<String, Object> producerConfigs() {
        Map<String, Object> props = new HashMap<>();
        // list of host:port pairs used for establishing the initial connections to the Kakfa cluster
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);

        return props;
    }

    @Bean
    public ProducerFactory<String, String> producerFactory() {
        return new DefaultKafkaProducerFactory<>(producerConfigs());
    }

    @Bean
    public KafkaTemplate<String, String> kafkaTemplate() {
        return new KafkaTemplate<>(producerFactory());
    }

    @Bean
    public Sender sender() {
        return new Sender();
    }
}

问题在于发送而不是生产

这里是application.yml文件属性

kafka:
   bootstrap-servers: localhost:9092
topic:
   helloworld: helloworld.t

简单的控制器包含

@RestController
public class Controller {
    protected final static String HELLOWORLD_TOPIC = "helloworld.t";

    @Autowired
    private Sender sender;

    @RequestMapping("/send")
    public String SendMessage() {

        sender.send(HELLOWORLD_TOPIC, "message");

        return "success";
    }
}

例外是

2017-12-20 09:58:04.645  INFO 10816 --- [nio-7060-exec-1] o.a.kafka.common.utils.AppInfoParser     : Kafka version : 0.10.1.1
2017-12-20 09:58:04.645  INFO 10816 --- [nio-7060-exec-1] o.a.kafka.common.utils.AppInfoParser     : Kafka commitId : f10ef2720b03b247
2017-12-20 09:59:04.654 ERROR 10816 --- [nio-7060-exec-1] o.s.k.support.LoggingProducerListener    : Exception thrown when sending a      message with key='1' and payload='message' to topic helloworld.t:

org.apache.kafka.common.errors.TimeoutException: Failed to update   metadata after 60000 ms.

【问题讨论】:

  • 你需要看看那个 ProducerFactory 的内部......或者有一个包含键的发送方法,而不仅仅是主题和值
  • 我找到了 KEY_SERIALIZER_CLASS_CONFIG 和 KEY_SERIALIZER_CLASS_DOC 。但我认为它们与异常之间没有关系
  • ProducerConfig 看错了类
  • >Failed to update metadata after 60000 ms. - 通常只是表示代理没有运行。

标签: java spring-boot apache-kafka spring-restcontroller spring-kafka


【解决方案1】:

此类错误的可能性很小。

  1. 使用配置的端口无法访问 Kafka 代理。
    • 为此,请尝试使用 telnet localhost 9092 远程登录,如果您得到的输出意味着 kafka borker 正在运行
  2. 检查 spring-boot 使用的 kafka-client 版本是否与您的 kafka 版本相同。如果版本不匹配,kafka 可能无法向 topic 发送数据

  3. 有时代理需要时间来了解新创建的主题。因此,生产者可能会因错误Failed to update metadata after 60000 ms. 而失败。要解决此问题,请使用 kafka 命令行选项手动创建 kafka。

  4. server.properties 的监听器配置不起作用。

你也可以试试

  • 将“bootstrap.servers”属性或 --broker-list 选项更改为 0.0.0.0:9092

  • 更改 2 个属性中的 server.properties

    • listeners = PLAINTEXT://your.host.name:9092 to listeners=PLAINTEXT://:9092
    • advertised.listeners=PLAINTEXT://your.host.name:9092 到advertised.listeners=PLAINTEXT://localhost:9092

希望有帮助!

【讨论】:

    【解决方案2】:

    这意味着您的代理没有运行。 检查 server.log 并在必要时重新启动代理

    【讨论】:

      【解决方案3】:

      使用包含键的方法

      kafkaTemplate.send(topic, key, payload);
      

      不清楚你想使用什么键值,但它应该均匀分布在主题的分区数中。例如,分区计数范围内的随机数。

      【讨论】:

      • 除了 key 之外它仍然抛出相同的异常。向主题 helloworld.t 发送带有 key='1' 和 payload='hhshshs' 的消息时抛出异常:
      • 好吧,那么异常与密钥无关,但这是您提出的问题。显示堆栈跟踪的其余部分
      猜你喜欢
      • 2019-10-13
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 2016-06-23
      • 1970-01-01
      • 2020-10-06
      相关资源
      最近更新 更多