栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

kafka学习笔记重点

kafka学习笔记重点

资料来源知乎,java guide,千锋教育B站视频
1.Kafka 如何保证消息不丢失
ack(1表示leader收到更新后发送ack,0,all需要设置参数)机制发布确认,消费者手动提交,kafka副本定为3个,有两个副本更新完就发送ack,不能多也不能少了,多了怕broker挂了一个然后就一直不能ack。
2.幂等,不重复消费
自带了幂等性机制只能保证一个生产者会话的一个patition里面幂等。
所以做好下游服务的幂等。用set去重即可,或者数据库唯一索引去重。
3.消费者负载均衡
配置分区的三种策略,range(例子7个分区,一个消费组的3个消费者),轮询差不多,粘性是说分区或者消费者发生变化后(会进行rebalance)不需要重新全部设置。
4.发送消息可以指定key或者指定分区。
5.kafka里面的概念
节点,主题 ,分区(包括很多段,段里面是log,index,时间索引),消费组里面的消费者不能接受一个分区(所以消费者数量不能超过分区的)。
6.Kafka可以保证同一个分区里的消息是有序的,即生产者按照一定的顺序发送消息,Broker就会按照这个顺序将他们写入对应的分区中,同理,消费者也会按照这个顺序来消费他们。

在一些场景下,消息的顺序是非常重要的。比如,先存钱再取钱与先取钱再存钱是截然不同的两种结果。

上面的问题中提到一个参数max.in.flight.requests.per.connections=1,该参数的作用是在重试次数大于等于1时,保证数据写入的顺序。如果该参数不为1,那么当第一个批次写入失败时,第二个批次写入成功,Broker会重试写入第一个批次,如果此时第一个批次重试写入成功,那么这两个批次消息的顺序就反过来了。
一般来说,如果对消息的顺序有要求,那么在为了保障数据不丢失,需要先设置发送重试次数retries>0,同时需要把max.in.flight.requests.per.connections参数设为1,这样在生产者尝试发送第一批消息时,就不会有其他的消息发送给broker,虽然会影响吞吐量,但是可以保证消息的顺序。

除此之外,还可以使用单分区的Topic,但是会严重影响吞吐量。

7.确定分区数量
一个简单的计算公式为:分区数 = max(生产者数量,消费者数量)

生产者数量=整体生产吞吐量/每个生产者对单个分区的最大生产吞吐量
消费者数量=整体消费吞吐量/每个消费者从单个分区消费的最大吞吐量

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/676880.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号