java kafka分布式_Kafka分布式消息系统

1.简介

Kafka是一个分布式消息系统,使用Scala语言进行编写,具有高水平扩展以及高吞吐量特性。

目前流行的消息队列主要有三种:ActiveMQ、RabbitMQ、Kafka

e397a012af1084794e4027eef092e594.png

ActiveMQ、RabbitMQ均支持AMQP协议,Kafka使用仿AMQP协议,目前Flume、Storm、Spark、Elasticsearch都支持与Kafka进行集成。

动态扩容:在不需停止服务的前提下动态的增加或减少节点,Kafka的动态扩容是通过zookeeper实现的,zookeeper上保存着kafka的相关状态信息(topic、partition等)

2.关于AMQP

AMQP全称 高级消息队列协议,是一个统一消息服务的应用层协议,为面向消息的中间件所设计,基于此协议的客户端与消息中间件可相互传递消息,并不受客户端和中间件的产品以及开发语言不同所限制。

d5b10e4c16c83a701bcc98db4345ce1b.png

Producer负责把消息发送给Broker。

Broker负责接收并存储Producer发送的消息。

Consumer负责从Broker中消费消息。

*Broker是消息队列中最小的运行单元,一个Broker的运行就代表着一个Kafka实例。

3.Kafka的模型

1.Broker

ddb0875673f324358c8e2a24a7653e27.png

Broker中可以包含多个Topic,每个Topic下又包含多个Partition。

一个Topic(主题)类似于新闻中的体育、娱乐、等分类概念,在实际开发中通常一个业务对应一个Topic。

一个Topic下由多个Partition组成,每个Partition都是一个First In First Out的队列,用于存放Topic中的消息。

21ad1ed90a83725865bce7cc10e602dd.png

每个消息在Partition中都有一个offset(偏移量),是消息在分区中的唯一标识。

每个Consumer都需要维护一份自己的offset,用于记录当前消费的进度,然后保存到Kafka当中(Consumer可以以任意的位置开始进行读取,只需要设置offset即可)

在一个可配置的时间段内,Kafka集群将保留所有发送的消息,不管这些消息是否被被消费。

Kafka的分区是提高Kafka性能的关键手段,当Kafka集群的性能不高时,可以试着往topic中添加分区。

Kafka的分区备份

Topic下的每个Partition在Kafka集群中都有备份,在逻辑相关的一组Partition中,都有一个作为Leader,其余作为Follower,Leader和Follwer的选举都是随机的,当Follower接收到请求时首先会发送给Leader,由Leader负责消息的读和写并把消息同步给各个Follower,如果Leader所在的节点宕机,Follower中的一台则会自动成为Leader。

2821bfd2f98747f0ebb143ec15ab76d1.png

比如搭建一个Kafka集群,存在3个节点,同时设置Topic的分区数以及分区的备份数是3,现往Broker1中创建一个New Topic,那么在每个Broker实例中都会存在一个New Topic,同时每个New Topic下都会包含3个Partition,在逻辑相关的一组Partition中,都有一个作为Leader,其余作为Follower。

2.Producer

Producer向Broker中指定的Topic发送消息,消息将会根据负载均衡策略进入相应的Partition。

*Producer向Broker发送消息时,除了指定Topic以及Message以外,还可以指定一个Key,用于Partition的散列,Key相同的消息将会保存到同一个Partition当中。

3.Consumer组

e400e5bed123b1aab26ecb926dab7f4a.png

Kafka提供了Consumer组的概念,一个Consumer组下可以包含多个Consumer。

Kafka规定,Topic下的每一个Partition都只能被Consumer组下的唯一一个Consumer进行消费,以确保消费的顺序性,因此Consumer组下的Consumer数量不能超过Partition的数量,否则将会处于空闲状态。

队列模式

若所有的Consumer都在同一个Consumer组中下则成为队列模式,Topic中的各个Partition都只能被组中的唯一一个Consumer进行消费,组下的Consumer共同竞争Topic中的Partition。

广播模式

若所有的Consumer都不在同一个Consumer组中则成为广播模式,Topic中各个P

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值