Kafka 高级特性解析


生产者

消息发送

数据生产流程解析

  1. Producer 创建时,会创建一个Sender 线程并设置为守护线程。
  2. 生产消息时,内部是异步流程,生产的消息先经过拦截器-》序列化器-》分区器,然后将消息存在缓冲区,(该缓冲区也是在 Producer创建时创建)
  3. 批次发送的条件为:缓冲区数据大小达到batch.size 或者linger.ms 达到上限,那个先达到就算那个。
  4. 批次发送后,发往指定分区,然后罗盘到broker; 如果生产者配置了retrires 参数 大于0 并且失败原因允许重试,那么客户端内部会对该消息进行重试。
  5. 落盘到broker 成功,返回生产元数据给生产者。
  6. 元数据返回有两种方式

Read more

进程管理


宏内核和微内核架构

系统属于软件的范畴,负责管理系统硬件资源,同时为应用程序开发和执行提供配套环境,OS必须具备两个功能

  1. 为应用程序提供执行环境
  2. 为多用户和应用程序管理计算机的硬件资源
  3. 虚拟性
  4. 并发性

宏内核

所有内核代码都编译一个二进制,所有的内核代码都运行在一个大内核地址空间里,内核代码可以直接访问和调用,效率高并且性能好

微内核

把操作系统分为多个独立的功能模块,每个功能模块之间的访问需要通过消息来完成,因此效率没有那么高

  1. 宏内核架构优点:设计简洁和性能比较好,而微内核架构优势也很显示,比如稳定性和实时性等。
  2. Linux 只使用ring0和ring3 两种模式为了实现内核态和用户态

Read more

linux 六大锁机制


内核使用内存屏障的场景

和自旋锁相比,信号量有哪些特点,信号量如何实现

自旋锁机制和信号量
自旋锁同一时刻只能被一个内核代码持有,如果有另一个内核代码视图获得一个已经被持有的自旋锁,那么次内核代码需要一只等待,直到只有锁释放锁

自旋锁的特点

  1. 可以在中断上下文中使用;
  2. 如果要求,自旋锁需要尽快完成临界区的执行任务
  3. 忙等待的锁机制
  4. 统一时间它只能有一个内核代码可以获得锁
    typedef struct spinlock {
        union{
            struct raw_spinlock rlock;
            #ifdef config_d

Read more

linux 内核启动流程


电源启动开始到BIOS

  1. 实时模式: 在此模式地址访问为真实内存地址所在位置,软件可以不受限制的操作所有的空间和IO设备
  2. 保护模式:全部使用虚拟内存和页等机制对内存进行保护,相比实时模式更为安全可靠,同时也增加拓展性和灵活性
  3. 从启动电源到BIOS: 按下电源-》主板会向电源组发出信号-》接受到信号后,当主板收到电源正常启动的信号之后,主板会启动cpu(cpu重置所有寄存器数据,并且初始化数据)比如32位系统:实模式采用内存端来管理0--0xFFFFF的这1MB内存空间,但是只有16位寄存器,所以最大地址只能是0xFFFFF(64kB)

从BIOS 到 BootLoader

  1. BIOS执行程序

Read more

kafa 消息发送和消费


消息生产者

生产者有两种,1,kafka-producer,2.producer-record,其中kafkaproducer 是用来发送消息的类,producerrecord 是用来封装kafka的消息。 kafkaproducer 的创建需要指定的参数和含义:

  1. bootstrap.servers 用来配置生产者如何与broker建立连接,该参数设置的是初始化参数,如果生产者需要连接的是kafka集群,则这里配置集群中几个broker的地址,而不是全部,当生产者连接上此处指定的broker 之后,在通过该连接发现集群中的其他节点
  2. key.serializer 要发送消息的key数据的序列化

Read more