【问题标题】:Kafka concurrency config Spring setConsumerTaskExecutor and setConcurrencyKafka 并发配置 Spring setConsumerTaskExecutor 和 setConcurrency
【发布时间】:2022-01-02 16:47:13
【问题描述】:

spring kafka 中的 setConsumerTaskExecutor() 和 setConcurrency() 有什么区别? 如果 ConsumerTaskExecutor 的 maxpool 大小与 setConcurrency 值不同会发生什么?

ThreadPoolTaskExecutor customExecutor= new ThreadPoolTaskExecutor();
exec.setCorePoolSize(3);
exec.setMaxPoolSize(6);

ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<String, String>();

factory.setConcurrency(10);
factory.getContainerProperties().setConsumerTaskExecutor(customExecutor);

谢谢

【问题讨论】:

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


    【解决方案1】:

    concurrency:

    同时运行的 KafkaMessageListenerContainer 的最大数量。来自同一分区内的消息将按顺序处理。

    ConsumerTaskExecutor:

    为轮询消费者的线程设置执行器。

    https://docs.spring.io/spring-kafka/docs/current/api/org/springframework/kafka/listener/ConcurrentMessageListenerContainer.html#getConcurrency()

    https://docs.spring.io/spring-kafka/docs/current/api/org/springframework/kafka/listener/ContainerProperties.html#setConsumerTaskExecutor(org.springframework.core.task.AsyncListenableTaskExecutor)


    换句话说,ConcurrentKafkaListenerContainer 基于concurrency 创建一个或多个KafkaMessageListenerContainers。每个KafkaMessageListenerContainer 共享ContainerProperties,使用ConsumerTaskExecutor 运行ListenerConsumer,它委托给Kafka consumer 进行投票。

    【讨论】:

    • 我与术语“轮询消费者”混淆了,这是否意味着消费者从代理接收消息并且线程池执行消息,例如,它是否有 10 个消费者并且最多 6 个线程将处理消息?
    • 在您的示例中,如果您仅创建 1 ConcurrentKafkaListenerContainer,则基于您的 setConcurrency=10,它将创建 10 个 KafkaMessageListenerContainers = 10 个线程(1 个消费者每个线程)。每个KafkaMessageListenerContainer 都会使用你的customExecutor 来启动一个线程。由于您的池大小 = 6,您将从第 7 个消费者那里获得Consumer thread failed to start - does the configured task executor have enough threads to support all containers and concurrency?
    • 线程不会在消费者之间共享 - 每个消费者都需要一个专用线程。
    • 是的,因为我们有 10 个消费者,所以我们需要 10 个线程(每个线程 1 个消费者)。
    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-26
    相关资源
    最近更新 更多