美文网首页
Kafka & NSQ

Kafka & NSQ

作者: raku | 来源:发表于2019-03-10 15:32 被阅读0次

    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 & NSQ

          本文链接:https://www.haomeiwen.com/subject/ugnupqtx.html