kafka
kafka为什么这么快?
1、缓存机制:包含Cache、FilesSystem Cache、PageCache等缓存机制
2、顺序写:操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快
3、Zero-copy:零拷贝技术减少拷贝次数,从页缓存直接到网络缓冲区,减少了用户态和内核态的拷贝步骤。
4、批量处理:Batching of Messages合并小的请求,然后以流的方式进行交互。
5、Pull模式:使用拉去消息模式进行消息的获取消费,最大化利用消费端消费能力。
6、使用了分区技术
7、序列化方式
kafka重复消费的情况?
1、发送端(produce)发送消息到broker后,由于网络都懂时间过长导致发送端发送超时,实际broker已经收到消息了,导致发送端会再次发送消息。
2、消费端配置了手动提交,刚拉去了一批数据处理了一部分,还没来得及手动提交,服务挂了,下次重启又会拉取相同的一批数据重复处理。
解决方案:
一般消费端是要做消息幂等处理的,比如:发送方发送的消息携带一个业务标识ID。
kafka消息丢失的几种情况?
1、发送端acks的设置,acks=0,producer直接发送消息,不管broker是否收到消息。
2、发送端acks的设置,acks=1,表示leader成功写入,但是follower节点有可能还没同步。
解决方案:
1、发送端acks的设置,acks=-1,表示所有的副本和leader都成功写入了日志中。
2、tries >1 重试大于1
3、unclean.leader.election.enable:false
选举ISR之内的副本作为leader。
4、配置min.insync.replicas>1,只有acks=-1的时候,min.insync.replicas才会生效。
5、producer发送消息,会自动重试,如果异常,可以将异常记录到数据库,进行单独处理。
6、消费者先消费数据再提交commit。

浙公网安备 33010602011771号