kafka知识点梳理

515 阅读2分钟

如果答案忘了,结合脑图再看看

另一种思路去理解kafka 

       引入kafka的主要目的解决服务间通信问题,有些人可能会说kafka可以流量削峰,这其实是希望通讯网络具有缓冲的功能。 那么我们是否可以从 broker与客户端建立网络连接的过程 和 broker进行数据缓存的过程呢?

**网络连接方式 **

        Kafka遵循了传统的方式,选择由producer向broker push消息并由consumer从broker pull消息,使用的是TCP长连接

生产者 

 **如何提高并发 **

  • 1、多线程;
  • 2、调整每次发送消息的批量大小 

** 如何保证生产端的消息的可靠性 **

  • 1、使用同步的方式发送消息 
  • 2、使用带callback的方式,发送消息,如果消息出问题,进行异常处理; 

**拦截器 **

 通过实现拦截器接口,重写方法,可以很方便的增加参数和做数据统计 

**压缩 **

 压缩有风险,使用时确保broker端没有配置压缩,否则如何生产者和broker的的压缩算法不一致,会导致broker的CPU飙升很高

broker 

  • 了解topic、partition、segment的概念,知道数据在broker上是如何存储的; 
  • 当broker接收到数据时,是如何一步一步的写入到磁盘的,又是如何一步一步的将数据通过零拷贝发送给消费者呢? 
  • 如何保证数据在broker的可靠性?ISR 低水位的概念? 禁止 消息落后的 broker,竞选leader
  • 什么是reblance,rebalance触发的条件是什么,应该如何避免呢?

消费者 

 **如何保证消息被消费了? **

  • 使用同步api,在消息处理完之后,手动提交位移; 

 **保证消息的幂等 **

  • redis实现

提交位移的API自己就能规避了瞬时异常,那 CommitFailedException 产生的原因,如何避免 如何提升并发量呢?

如何保证消息的有序性?

为什么kafak具备高性能?

**    broker:**

**              1、架构:多个partition,并发;**

**              2、NIO异步三层网络模型;**

**              3、磁盘顺序读写;刷磁盘的时候使用了oscache**

**              4、文件存储格式,跳表,增加索引效率;**

**              5、零拷贝,直接从内存中取数据,减少内存拷贝**

   producer**:**

**            1、批处理;**

**            2、使用内存池,对象重复利用,减少GC**

**            3、封装同一服务器请求,减少网络连接次数**

**  consumer:**

**            1、消费者组,实现点对点和发布订阅;**

**            2、设计的不是很好,因为reblance**