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协议会再次以相同的顺序发送相同的数据包

- 阅读剩余部分 -

进程与线程的基本概念

所谓进程就是线程的容器,需要线程利用进程中的一些资源,处理一个代码、指令。最终实现进程所预期的结果。
进程和线程的区别:
● 根本不同:进程是操作系统分配资源的单位(加载指令,管理内存,管理io),线程是CPU调度的基本单位。
● 资源方面:同一个进程下的线程共享进程中的一些资源。线程同时拥有自身的独立存储空间。进程之间的资源通常是独立的。
● 数量不同:进程一般指的就是一个进程。而线程是依附于某个进程的,而且一个进程中至少会有一个或多个线程。
● 开销不同:毕竟进程和线程不是一个级别的内容,线程的创建和终止的时间是比较短的。而且线程之间的切换比进程之间的切换速度要快很多。而且进程之间的通讯很麻烦,一般要借助内核才可以实现,而线程之间通讯,相当方便。

- 阅读剩余部分 -