Kafka - kafka生产者 消费者 监听配置属性

kafka生产者属性

参数含义
acks发出消息持久化机制参数,它有下面几个属性 “all”, “-1”, “0”, “1” 默认值是all(all和-1是一样的) (1)acks=0:表示producer不需要等待任何broker确认收到消息的回复,就可以继续发送下一条消息。性能最高,但是最容易丢消息。(2)acks=1: 至少要等待leader已经成功将数据写入本地log,但是不需要等待所有follower是否成功写入。就可以继续发送下一 条消息。这种情况下,如果follower没有成功备份数据,而此时leader又挂掉,则消息会丢失。 (3)acks=-1或all: 需要等待 min.insync.replicas(默认为1,推荐配置大于等于2) 这个参数配置的副本个数都成功写入日志,这种策略会保证只要有一个备份存活就不会丢失数据。这是最强的数据保证。一般除非是金融级别,或跟钱打交道的场景才会使用这种配置。
retries生产者 发送消息重试次数 发送失败会重试,默认重试间隔100ms,重试能保证消息发送的可靠性,但是也可能造成消息重复发送,比如网络抖动,所以需要在 接收者那边做好消息接收的幂等性处理 ProducerConfig.RETRIES_CONFIG 重试次数 默认值Integer.MAX_VALUE
retry.backoff.ms重试时间间隔 ProducerConfig.RETRY_BACKOFF_MS_CONFIG 重试时间间隔
enable.idempotence幂等,默认是true 生产者发送消息模式开启幂等,启用幂等要求max.in.flight.requests.per.connection小于或等于5(保留任何允许值的消息顺序),重试次数大于0,acks必须是’all’, 开启事务必须开启幂等,ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG
transactional.id默认值null,默认情况下,事务需要至少三个代理的集群,这是生产环境的推荐设置;对于开发,您可以通过调整代理设置transaction.state.log.replication.factor来改变这一点。如果没有提供TransactionalId,那么生产者将被限制为幂等交付,如果配置了事务,请启用事务
ProducerConfig.TRANSACTION_TIMEOUT_CONFIG事务的一个超时时间 60000
ProducerConfig.COMPRESSION_TYPE_CONFIG消息压缩:none、lz4、gzip、snappy,默认为 none。
buffer.memory设置发送消息的本地缓冲区,如果设置了该缓冲区,消息会先发送到本地缓冲区,可以提高消息发送性能,默认值是33554432,即32MB
batch.sizekafka本地线程会从缓冲区取数据,批量发送到broker, 设置批量发送消息的大小,默认值是16384,即16kb,就是说一个batch满了16kb就发送出去
linger.ms这个在spring boot配置中需要配置在 properties属性map里, 默认值是0,意思就是消息必须立即被发送,但这样会影响性能, 一般设置10毫秒左右,就是说这个消息发送完后会进入本地的一个batch,如果10毫秒内,这个batch满了16kb就会随batch一起被发送出去, 如果10毫秒内,batch没满,那么也必须把消息发送出去,不能让消息的发送延迟时间太长
ProducerConfig.MAX_REQUEST_SIZE_CONFIG每条消息最大的大小 默认值 1024 * 1024,1M
ProducerConfig.MAX_BLOCK_MS_CONFIGKafkaProducer.send() 和 partitionsFor() 方法的最长阻塞时间 单位 ms 默认值 60 * 1000
ProducerConfig.CLIENT_ID_CONFIG客户端ID 默认值空
ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG把发送的key从字符串序列化为字节数组
ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG把发送消息value从字符串序列化为字节数组
ProducerConfig.PARTITIONER_CLASS_CONFIG分区策略 自定义分区器

kafka消费者属性

参数含义
group.id消费分组名
enable.auto.commit是否自动提交offset,默认就是true
auto.commit.interval.ms自动提交offset的时间间隔, 默认5s
auto.offset.reset当消费主题的是一个新的消费组,或者指定offset的消费方式,offset不存在,那么应该如何消费 ; latest(默认) :只消费自己启动之后发送到主题的消息 earliest:第一次从头开始消费,以后按照消费offset记录继续消费,这个需要区别于consumer.seekToBeginning(每次都从头开始消费),none:如果未找到消费者组的先前偏移量,则向消费者抛出异常
heartbeat.interval.msconsumer给broker发送心跳的间隔时间,默认时间3秒,broker接收到心跳如果此时有ebalance发生会通过心跳响应将rebalance方案下发给consumer,这个时间可以稍微短一点session.timeout.ms:默认45秒,服务端broker多久感知不到一个consumer心跳就认为他故障了,会将其踢出消费组, 对应的Partition也会被重新分配给其他consumer
max.poll.records默认值500 一次poll最大拉取消息的条数,如果消费者处理速度很快,可以设置大点,如果处理速度一般,可以设置小点
max.poll.interval.ms默认300秒 如果两次poll操作间隔超过了这个时间,broker就会认为这个consumer处理能力太弱,会将其踢出消费组,将分区分配给别的consumer消费
ConsumerConfig.INTERCEPTOR_CLASSES_CONFIG设置Consumer拦截器
ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG请求超时 默认值30000
ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG消费分区分配策略,Range,RoundRobin,Sticky

listenner监听配置


> ack-mode: 提交偏移量类型 listener: ack-mode
>       # 当每一条记录被消费者监听器(ListenerConsumer)处理之后提交
>       # RECORD
>       # 当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后提交
>       # BATCH
>       # 当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后,距离上次提交时间大于TIME时提交
>       # TIME
>       # 当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后,被处理record数量大于等于COUNT时提交
>       # COUNT
>       # TIME | COUNT 有一个条件满足时提交
>       # COUNT_TIME
>       # 当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后, 手动调用Acknowledgment.acknowledge()后提交
>       # MANUAL
>       # 手动调用Acknowledgment.acknowledge()后立即提交
>       # MANUAL_IMMEDIATE 一般开发中都会使用MANUAL_IMMEDIATE手动提交
> 
> concurrency: 并发量 ,该值设置需要小于等于分区总数,如果大于分区数没有任何意思 也一样消费不到数据
> 
> type:消费类型     batch: 批量消费  一次拉取多条数据   single: 单条数据消费    其中的ack_count
> 和ack_time 分别是在ack-mode 设置为COUT和TIME时的阈值,  如果ack-mode是Count
> ack-count设置为5 那么消费者实例会在没监听到五条数据时进行一次提交,如果消息数据小于5条是不会进行提交的 
> 同样如果ack-mode是TIME ack-TIME设置5s  如果消费者消费到数据的5秒内
> 消费者实例暂停,再次启动消费者时,一样会消费到上一次数据,因为消费者会在消费到消息的5秒后进行offset提交 ```
> >MANUAL: 在处理完最后一次轮询的所有结果后,将队列排队,并在一次操作中提交偏移量。可以认为是在批处理结束时提交偏移量 MANUAL_IMMEDIATE:只要在侦听器线程上执行确认,就立即提交偏移。会在批量执行的时候逐一提交它们。




**如果你喜欢我写的文章,麻烦你动动你发财的小手,帮忙点个赞哦,==手动比心==,后面我将会把我把我写好的一系列的代码实战放到GitHub上,供大家参考,如有任务疑问可以留言告知**  

![Alt](https://img-blog.csdnimg.cn/fa559c8d500c42998a14370b700662ae.png )





  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值