springboot + @KafkaListener 手动提交及消费能力优化

public class KonkaKafkaListener {

    private final static Logger LOGGER = LoggerFactory.getLogger(KonkaKafkaListener.class);


    @Autowired
    private RouterService routerService;


    @KafkaListener(containerFactory = "kafkaListenerContainerFactory", topics = "test")
    public void consumerListener(List<ConsumerRecord> consumerRecords, Acknowledgment ack) {
        ack.acknowledge();//直接提交offset
        if (consumerRecords.size() > 0) {
            PartitionCounter.addCounter(consumerRecords.get(0).partition(), consumerRecords.size());
        }
        Iterator<ConsumerRecord> iterator = consumerRecords.iterator();
        while (iterator.hasNext()) {
            ConsumerRecord consumerRecord = iterator.next();
            String key = consumerRecord.key().toString();
            KafkaLogMessage kafkaLogMessage = (KafkaLogMessage) consumerRecord.value();
            if (kafkaLogMessage == null) {
                continue;
            }
            routerService.handleKafkaMessage(key, kafkaLogMessage);
        }
    }
#消费者并发启动个数(对应分区个数)每个listener方法
kafka.concurrency=10  

将启动器的并发提高到和分区数一致

 

kafka 消费能力的提高

1、自动提交的实现

2、autoCommitIntervalMs 设置每次隔多久自动提交offset

3、kafka.max.poll.interval.ms 和 sessionTimeout

max.poll.interval.ms ,它表示最大的poll数据间隔,如果超过这个间隔没有发起pool请求,但heartbeat仍旧在发,就认为该consumer处于 livelock状态。就会将该consumer退出consumer group

之后就会触发导致reblance

·heartbeat.interval.ms

心跳间隔。心跳是在consumer与coordinator之间进行的。心跳是确定consumer存活,加入或者退出group的有效手段。

    这个值必须设置的小于session.timeout.ms,因为:

当Consumer由于某种原因不能发Heartbeat到coordinator时,并且时间超过session.timeout.ms时,就会认为该consumer已退出,它所订阅的partition会分配到同一group 内的其它的consumer上。

    通常设置的值要低于session.timeout.ms的1/3。

    默认值是:3000 (3s)

·session.timeout.ms

Consumer session 过期时间。这个值必须设置在broker configuration中的group.min.session.timeout.ms 与 group.max.session.timeout.ms之间。

其默认值是:10000 (10 s)

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
在Spring Boot中集成多个Kafka监听器的方式与集成单个监听器的方式类似。你可以按照以下步骤进行操作: 1. 首先,确保你已经在项目的依赖中引入了Spring Kafka库。你可以在`pom.xml`文件中添加如下依赖: ```xml <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> ``` 2. 创建多个Kafka监听器。你可以为每个监听器创建一个独立的Bean,并使用`@KafkaListener`注解标注它们。例如,创建两个监听器的代码如下所示: ```java @Component public class KafkaListener1 { @KafkaListener(topics = "topic1") public void listen1(String message) { // 处理消息 } } @Component public class KafkaListener2 { @KafkaListener(topics = "topic2") public void listen2(String message) { // 处理消息 } } ``` 3. 在配置文件中配置Kafka相关属性。你需要为每个监听器配置相应的Kafka消费者属性。可以在`application.properties`或`application.yml`中添加以下配置: ```yaml spring.kafka.consumer.bootstrap-servers=<kafka-bootstrap-servers> spring.kafka.consumer.group-id=<group-id-for-listener1> spring.kafka.consumer.auto-offset-reset=earliest|latest ``` 根据实际情况,为每个监听器设置不同的`group-id`和其他属性。 4. 启动应用程序。当应用程序启动时,每个监听器将开始监听其指定的Kafka主题,并处理接收到的消息。 通过这种方式,你可以集成多个Kafka监听器。每个监听器将独立地监听不同的Kafka主题,并处理它们接收到的消息。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值