WRY

Where Are You?
You are on the brave land,
To experience, to remember...

0%

消息队列--NSQ & Kafka

NSQ

概念

  • Topic 队列名称
  • channel 每个channel都会接收消息
  • nsqd channel运行的载体
  • nsqLookupd 类似服务发现,channel向nsqLookupd注册,consumer在nsqLookupd发现channel

特点

  • NSQ 是基于内存的(超出内存限制部分会存储到磁盘),故障时会丢数据
  • 保证最基本的at least once
  • 数据是无序的
  • 数据是不可回溯的
  • push 模型,将数据主动推送给消费者
  • 与Kafka相比,吞吐一般
  • 没有备份机制
  • requeue和defer机制,可以将消息重新送入队列、延迟消费数据,任务队列的重试机制

Kafka

之后补充内容

概念

  • Topic 队列的名称和NSQ的概念相同
  • partition 数据均匀的分布在partition中
  • broker partition 运行的载体

特点

  • 数据写入到磁盘,故障时数据不丢失
  • 可以保证exactly once
  • 数据是有序的(单个partition而言)
  • 数据是可以回溯一段时间的
  • pull模型(批量拉取数据),可以有多个消费者,同时主动从partition中拉取数据(一个partition 对一个消费者而言,只能有一个进程)
  • 比NSQ的吞吐量大
  • 有备份机制(写入数据的时候,可以指定成功写入几个备份,确认写入成功),在实际项目中因为备份的确认机制,导致过性能较低的问题。
  • 没有requeue和defer机制

Rebalance机制

一个消费者消费Kafka的时候,一个partition最多只有一个consumer对应,一个consumer可以消费多个partition

watch zookeeper 机制,当partition和consumer发生变化时,进行rebalance 牧群效应:一个consumer发生变化,导致整个集群进入rebalance状态 脑裂: 暂时没有搞懂这个词

Kafka高可用性的原因

  • batch send 批量发送机制
  • compression broker提供压缩服务
  • ISR 备份机制,可以选择几个备份成功,算是投递成功
  • append only 顺序写磁盘,速度快
  • page cache 数据可以在写入磁盘之前被消费者消费
  • zero copy 使用DMA->内核buffer->网卡,没有重复复制的开销