消息队列MQ

kafka 难点

本文主要是介绍kafka 难点,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

参考文章

[[Kafka常见面试题](https://blog.csdn.net/qq_28900249/article/details/90346599)
[参考文章](https://www.cnblogs.com/juniorMa/articles/13936154.html)

重要考点

  1. kafka 为什么那么快
    • Cache Filesystem Cache PageCache缓存

    • 顺序写 由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快。

    • Zero-copy 零拷技术减少拷贝次数

传统传输文件流程
1. 硬盘—>内核buf—>用户buf—>socket相关缓冲区—>协议引擎

零拷贝
1. sendfile系统调用,文件数据被copy至内核缓冲区
2. 再从内核缓冲区copy至内核中socket相关的缓冲区
3. 最后再socket相关的缓冲区copy到协议引擎

总结
相较传统read/write方式,2.1版本内核引进的sendfile已经减少了内核缓冲区到user缓冲区,再由user缓冲区到socket相关缓冲区的文件copy,而在内核版本2.4之后,文件描述符结果被改变,sendfile实现了更简单的方式,再次减少了一次copy操作

* Batching of Messages 批量量处理。合并小的请求,然后以流的方式进行交互,直顶网络上限。

* Pull 拉模式 使用拉模式进行消息的获取消费,与消费端处理能力相符。
  1. 消息堆积
    1. 消费端宕机
      增加自动拉起脚本 告警
    2. 消费能力弱
      增强消费能力 异常处理
    3. 调节消费参数
      1. max.poll.interval.ms 每次poll消息处理时间调大
      2. max.poll.records 每次拉取消息条数减小
    4. 分片少
    5. 分片不均匀
      producer生产时设置key hash到分区均匀
这篇关于kafka 难点的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!