2024年7月

AMQP协议

● 生产者(Producer):发送消息的应用。
● 消费者(Consumer):接收消息的应用。
● 队列(Queue):存储消息的缓存,一个队列queue存多条消息。
● 消息(Message):由生产者通过RabbitMQ发送给消费者的信息,消息存储在消息队列queue中。
● 连接(Connection):连接RabbitMQ和应用服务器的TCP连接(上图中发送消息和接收消息都是必须先建立连接的)。
● 通道(Channel):连接里的一个虚拟通道。当你通过消息队列发送或者接收消息时,这个操作都是通过通道进行的。
● 交换机(Exchange):生产者发送消息是先发到交换机,再由交换机发送到队列里面,并最终保存在队列里面。就好比寄快递,台湾寄到长沙,可能要先寄到上海,那么上海就是这个交换机。

- 阅读剩余部分 -

kafka为什么那么快
客户端缓冲区(默认32M),写时复制,顺序写文件
kafka架构图

kafka的reblance机制
rebalance就是说如果消费组里的消费者数量有变化或消费的分区数有变化,kafka会重新分配消费者消费分区的关系。比如consumer group中某个消费者挂了,此时会自动把分配给他的分区交给其他的消费者,如果他又重启了,那么又会把一些分区重新交还给他。
注意:rebalance只针对subscribe这种不指定分区消费的情况,如果通过assign这种消费方式指定了分区,kafka不会进行rebanlance。

- 阅读剩余部分 -

三次握手
三次握手的过程

为了保证数据能到达目标,TCP采用三次握手策略:

  1. 发送端首先发送一个带SYN(synchronize)标志的数据包给接收方【第一次的seq序列号是随机产生的,这样是为了网络安全,如果不是随机产生初始序列号,黑客将会以很容易的方式获取到你与其他主机之间的初始化序列号,并且伪造序列号进行攻击】
  2. 接收端收到后,回传一个带有SYN/ACK(acknowledgement)标志的数据包以示传达确认信息【SYN 是为了告诉发送端,发送方到接收方的通道没问题;ACK 用来验证接收方到发送方的通道没问题】
  3. 最后,发送端再回传一个带ACK标志的数据包,代表握手结束若在握手某个过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包

- 阅读剩余部分 -