Kafka

Kafka的定义

传统定义:是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。
发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息。
最新定义:Kafka是一个开源的分布式事件流平台,用于高性能数据管道、流分析、数据集成和关键任务应用。

Kafka消费分区策略

–Range:是针对每个topic而言的。
首先对同一个topic里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。
(假如现在有7个分区,3个消费者,排序后的分区将会是0,1,2,3,4,5,6;消费者分区c0,c1,c2.)
通过 分区数partitions / 消费者数consumers 来决定每个消费者应该消费几个分区。如果除不
尽,那么前面几个消费者将会多消费1个分区。
如果只是针对1个topic而言,C0消费者多1个分区影响不是很大,如果有N个topic,那么针对每
个topic,消费者C0都将多消费1个分区,topic越多,C0消费的分区会比其他消费者明显多消费
N个分区。
!!!容易产生数据倾斜!!!
–RoundRobin:针对集群中所有的topic而言的。
轮询分区策略,是把所有的partition和所有的consumer都列出来,然后按照hashcode进行
排序,最后通过轮询算来分配partition给到各个消费者。
–粘性分区:可以理解为分配的结果带有“粘性的”。即在执行一次新的分配之前,考虑到上一次分配的结果
尽量少的调整分配的变动,可以节省大量的开销。

Kafka一个节点挂掉了怎么处理

在生产环境中如果某个节点挂掉,日常处理办法:
–(1)先看日志,尝试重新启动一下,如果能启动正常,就直接解决。
–(2)如果重新启动不成功,检查内存、CPU、网络带宽。调优,如果调优不行就增加资源。
–(3)如果将Kafka整个节点误删,副本数大于等于2的情况下,可以按照服役新节点的方式重新服役一个
新节点,并执行负载均衡。

Kafka如何保证数据不丢失

–producer角度:acks=0:生产者发送过来数据就不管了,可靠性差,效率高;
acks=1:生产者发送过来数据Leader应答,可靠性中等,效率中等;
acks=-1:生产者发送过来数据Leader和ISR队列里面所有Follwer应答,可靠性高效率低
在生产环境中,acks=0很少使用;acks=1一般用于传输普通日志,允许丢失个别数据;acks=-1一般用
于传输和钱相关的数据,对可靠性要求比较高的场景。
–Broker角度:副本数大于等于2。
min.insync.replicas大于等于2。

Kafka怎么样高效读写

–Kafka本身是分布式集群,可以采用分区技术,并行度高。
–读数据采用稀疏索引,可以快速定位到要消费的数据。
–顺序写磁盘(节省了大量磁头寻址时间)
–页缓存+零拷贝技术
–页缓存:把尽可能多的空闲内存都当做了磁盘缓存来使用。
–零拷贝:不关心存储的数据,所以就不走应用层,传输效率高。

Kafka如何保证数据不重复

–生产者角度:acks设置为-1,幂等性+事务
–broker服务端角度:分区副本大于等于2,ISR里应答的最小副本数量大于等于2
–消费者角度:事务+手动提交offset,消费者输出目的地必须支持事务

Kafka如何保证数据有序

Kafka只能保证单分区内有序,如果想要保证全局有序,只能设置topic为单分区。
–方案1:禁止重试,设置retries为0。
数据出现乱序的根本原因是,失败重试,关闭重试可以保证数据是有序的。但是这样可能会造成
数据丢失。
–方案2:启用幂等性:需要设置几个参数
设置enable.idempotence=true
设置max.in.flight.requests.per.connection 小于等于5
设置retries 大于0
设置acks 等于1

Kafka如何提高吞吐量

–提升生产吞吐量:(1)buffer.memory:发送消息的缓冲区大小,默认值是32m,可以增加到64
(2)batch.size:默认16k。如果设置太小,会导致频繁网络请求,吞吐量下降;如果
太大,会导致一条消息需要等待很久才能被发送出去,增加网络延时。
(3)linger.ms:这个值默认是0,
(4)compression.type:默认是none,不压缩,压缩之后可以减小数据量,提升吞吐
量,但是会加大producer端的CPU开销。
–增加分区
–提高消费者吞吐量:(1):fetch.max.bytes:默认50m
(2):max.poll.records:默认500条

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值