Kafka & NSQ

Kafka & NSQ

Kafka

kafka struct
kafka & consumer group 2
kafka group 3

图中说明一个consumer 可以消费多个partition (一般配置的partition有10个)
但是一个partition 只能连接一个consumer
Consumer 可以认为是消费者服务的实例

多个consumer可以组成一个组,每个消息只能被组中的一个consumer消费,
(所以一个partition对应的在同一个组中对应的consumer只有一个)
如果一个消息可以被多个consumer消费的话,那么这些consumer必须在不同的组。
(正如图3 中的两个不同颜色的线 虽然是同一个内容的消息 但是去往不同的组)
一个partition,只能被消费组里的一个消费者消费,但是可以同时被多个消费组消费

每个主题有多个分区,不同的消费者处理不同的分区,所以Kafka不仅保证了消息的有序性,也做到了消费者的负载均衡。

因为经常说到partition可以用于负载均衡 一个消息只会进入其中一个partition
自己的实验也证实了这种猜测

Kafka 分布式

Kafka 的生产者和消费者相对于服务端而言都是客户端,生产者客户端发布消息到服务端的指定主题, 会指定消息所属的分区。生产者发布消息时根据消息是否有键, 采用不同的分区策略。消息没有键时,通过轮询方式进行客户端负载均衡消息有键时,根据分区语义确保相同键的消息总是发送到同一个分区。


image.png

NSQ

nsqd and channel. GIF

https://cdn-images-1.medium.com/max/1600/1*rlL7_0y1aBuvA7jU7E4lig.png

对于发往Topic的消息,nsqd向该Topic下的所有Channel投递消息,而同一个Channel只投递一次
Channel下如果存在多个消费者,则随机选择一个消费者做投递。这种投递方式可以被用作消费者负载均衡。

关于可靠性

at-least-one模式,至少发送一次,
time-out重传,因此consumer可能会接收重复数据。

nsqlookupd

会监听两个端口:
http: 4161 客户端用它来发现和管理。
tcp: 4160 nsqd 用它来广播

nsqd

会监听两个端口:
http: 4151
tcp: 4150

nsqd 是一个守护进程,负责接收,排队,投递消息给客户端。

nsqadmin

监听一个端口
http:4171

写入数据pub(publish)

一个POST请求
curl -d 'hello world 1' 'http://127.0.0.1:4151/put?topic=test'

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • kafka的定义:是一个分布式消息系统,由LinkedIn使用Scala编写,用作LinkedIn的活动流(Act...
    时待吾阅读 5,375评论 1 15
  • 本文转载自http://dataunion.org/?p=9307 背景介绍Kafka简介Kafka是一种分布式的...
    Bottle丶Fish阅读 5,513评论 0 34
  • 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下: 以时间复杂度为O...
    高广超阅读 12,910评论 8 167
  • Design 1. Motivation 我们设计Kafka用来作为统一的平台来处理大公司可能拥有的所有实时数据源...
    BlackManba_24阅读 1,433评论 0 8
  • 星期一 睡到自然醒 晨光乍惊 清水洗脸 温水半杯 踏一人字拖 下四楼直走 出小区右转 沐浴夏风 尽享煦日洗礼 打开...
    城北瞿公阅读 178评论 0 2