「Kafka 系列(六)」

您所在的位置:网站首页 kafka消费速度限制 「Kafka 系列(六)」

「Kafka 系列(六)」

#「Kafka 系列(六)」| 来源: 网络整理| 查看: 265

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第17天,点击查看活动详情。

Kafka 系列文章 「Kafka 系列(一)」- Kafka 入门 「Kafka 系列(二)」- 快速搭建Kafka节点(Kafka3.1) 「Kafka 系列(三)」- spring-kafka 入门实战 「Kafka 系列(四)」- Kafka 生产者常见的配置参数详解 「Kafka 系列(五)」- 如何防止 Kafka 丢失消息 前言

消费者的参数配置非常重要,如果存在多个消费者的情况,消费者的正确配置才能让程序按照预期的方式进行消费。

比如你有两个消费者,同时你给两个消费者配置了 相同的 GroupID,但你想的是一条消息同时给两个消费者消费,那么你的配置肯定是不符合预期的。

本文列出一些常见的消费者配置参数,以及不同配置项的效果。

消费者常见的配置参数

如下图,要想知道有多少个参数可以配置的话,可以搜索 KafkaProperties 这个类,里面有一个内部类 Consumer,这个内部类的成员,就是我们可以配置的参数。 在这里,我们挑选几个重要的、常见的参数详解。

1)spring.kafka.consumer.group-id

用来唯一标识 Consumer 进程所在组的字符串,如果设置同样的 Group Id,表示这些 Processes 都是属于同一个 Consumer Group。

默认值:「""」。

对于一条消息,不同的消费组都会进行消费,但同一个消费组只会消费一次。

示例:

spring.kafka.consumer.group-id=group1 复制代码 2)消费超时控制参数

你是否遇到过这样的问题,往 Kafka 发送一定数量的消息,但消费者重复的在拉取某一部分数据进行重复的消费,并且不提交 Offset,消费的数据不往下走,关于重复消费的集中情况,可以查看我往期的文章「==TODO==」。

合理的配置参数,也是可以避免重复消费的发生的,我们先看看下面的三个参数:

max-poll-records:消费者每次从 Kafka 拉取的数据条数,默认是 500。 max.poll.interval.ms:消费者每次从 Kafka 拉取数据的间隔时间,超时会认为该消费者已死亡,触发重平衡。默认是 300000。 session.timeout.ms:会话超时时间,如果消费者在这个时间内没有发送心跳消息,Kafka 会认为这个消费者挂了,会触发重平衡。默认是 10000。 heartbeat-interval:消费超时时间,大小不能超过 session.timeout.ms 参数的值。默认为 3000。

session.timeout.ms 是个「逻辑」指标,它指定了一个阈值,超过这个阈值,Kafka 直接认为这个消费者已死亡,触发重平衡。而 heartbeat-interval 是一个「物理」指标,该参数控制消费者每隔一段时间就向 Kafka 发送心跳,证明自己还活着,只要在 session.timeout.ms 收到 heartbeat-interval,就算你活!因此 session.timeout.ms 可定是要大于 heartbeat-interval 的。

3)auto-offset-reset

没有初始化的 offset 时,可以设置以下三种情况:(默认:latest)

earliest:当各分区下有已提交的 offset 时,从提交的 offset 开始消费;无提交的 offset 时,从头开始消费。 latest:当各分区下有已提交的 offset 时,从提交的 offset 开始消费;无提交的 offset 时,消费新产生的该分区下的数据。 none:topic 各分区都存在已提交的 offset 时,从 offset 后开始消费;只要有一个分区不存在已提交的 offset,则抛出异常。 4)反序列化配置

如果你在生产者方设置了序列化方式,在消费者要设置相同的反序列方式,否则可能会出现反序列化失败的异常。

key-deserializer:Key 的反序列化类,实现了 org.apache.kafka.common.serialization.Deserializer 接口的类全限定名都可以成为这个配置项的值。 value-deserializer:值的反序列化类,实现了 org.apache.kafka.common.serialization.Deserializer 接口的类全限定名都可以成为这个配置项的值。 5)client-id

消费者进程的标识。如果设置一个人为可读的值,跟踪问题会比较方便,默认值为「“”」。

写在最后

本文列举了一些 Kafka 消费端的常用配置参数,同时 spring-kafka 源码里的 Properties 是一个 Map 对象,可以修改 spring-kafka 未列举出的 Consumer 配置。

修改之前,别忘了使用 Demo 验证是否符合预期噢!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3