kafka

1、Kafka是个什么东西
– kafka是一个高吞吐的分部式消息系统
2、消息列队常见场景
• 系统之间解耦合
• 峰值压力缓冲
• 异步通信
3、kafka架构
producer:生产者
consumer:消费者
broker:kafka集群的server,负责处理消息的读、写请求,存储信息
topic:消息队列/分类
在这里插入图片描述
4、kafka的消息存储和生产消费模型
(1)一个topic分成多个partition
(2)每个partition内部消息强有序,其中的每个消息都有一个序号叫offset
(3)一个partition只对应一个broker,一个broker可以管多个partition
(4)消息直接写入文件,并不是存储在内存中
(5)根据时间策略(默认一周)删除,而不是消费完就删除
(6)producer自己决定往哪个partition写消息,可以是轮询的负载均衡,或者是基于hash的partition策略
在这里插入图片描述
(10)kafka里面的消息是有topic来组织的,简单的我们可以想象为一个队列,一个队列就是一个topic,然后它把每个topic又分为很多个partition,这个是为了做并行的,在每个partition里面是有序的,相当于有序的队列,其中每个消息都有个序号,比如0到12,从前面读往后面写。
(11)一个partition对应一个broker,一个broker可以管多个partition,比如说,topic 有6个partition,有两个broker,那每个broker就管3个partition。
(12)这个partition可以很简单想象为一个文件,当数据发过来的时候它就往这个partition上面append,追加就行,kafka和很多消息系统不一样,很多消息系统是消费完了我就把它删掉,而kafka是根据时间策略删除,而不是消费完就删除,在kafka里面没有一个消费完这么个概念,只有过期这样一个概念
(1)consumer自己维护消费到哪个offset
(2)每个consumer都有对应的group
(3)group内是queue消费模型
各个consumer消费不同的partition –一个消息在group内只消费一次
(4)各个group各自独立消费,互不影响
在这里插入图片描述
5、kafka有哪些特点
(1)消息系统的特点:生存者消费者模型,FIFO
partition内部是FIFO的,partition之间呢不是FIFO的,当然我们可以把topic设为一个partition,这样就是严格的FIFO
(2)高性能:单节点支持上千个客户端,百MB/s吞吐
(3)持久性:消息直接持久化在普通磁盘上且性能好
直接写到磁盘里面去,就是直接append到磁盘里面去,这样的好处是直接持久话,数据不会丢,第二个好处是顺序写,然后消费数据也是顺序的读,所以持久化的同时还能保证顺序读写
(4)分布式:数据副本冗余、流量负载均衡、可扩展
分布式,数据副本,也就是同一份数据可以到不同的broker上面去,也就是当一份数据,磁盘坏掉的时候,数据不会丢失,比如3个副本,就是在3个机器磁盘都坏掉的情况下数据才会丢。
(5)很灵活:消息长时间持久化+Client维护消费状态
消费方式非常灵活,第一原因是消息持久化时间跨度比较长,一天或者一星期等,第二消费状态自己维护消费到哪个地方了,可以自定义 消费偏移量
6、kafka与其他消息队列对比
(1)RabbitMQ:分布式,支持多种MQ协议,重量级’
•RabbitMQ也是常见的消息对列,它支持多种MQ的协议,jms啊,等多种协议等 等,它的缺点比较重
(2)ActiveMQ:与RabbitMQ类似
ActiveMQ也和RabbitMQ类似,支持的协议比较多
(3)ZeroMQ:以库的形式提供,使用复杂,无持久化
ZeroMQ是一个socket的通信库,它是以库的形式提供的,所以说你需要写程序来 实现消息系统,它只管内存和通信那一块,持久化也得自己写,还是那句话它是用来实现消息队列的一个库,其实在storm里面呢,storm0.9之前,那些spout和bolt,bolt和bolt之间那些底层的通信就是由ZeroMQ来通信的,它并不是一个消息队列,就是一个通信库,在0.9之后呢,因为license的原因,ZeroMQ就由Netty取代了,Netty本身就是一个网络通信库嘛,所以说更合适是在通信库这一层,不应该是MessageQueue这一层
(4)redis:单机、纯内存性好,持久化较差
Redis,本身是一个内存的KV系统,但是它也有队列的一些数据结构,能够实现一些消息队列的功能,当然它在单机纯内存的情况下,性能会比较好,持久化做的稍差,当持久化的时候性能下降的会比较厉害
(5)kafka:分布式,较长时间持久化,高性能,轻量灵活
Kafka的亮点,天生是分布式的,不需要你在上层做分布式的工作,另外有较长时间持久化,前面的几个MQ基本消费就干掉了,另外在长时间持久化下性能还比较 高,顺序读和顺序写,另外还通过sendFile这样0拷贝的技术直接从文件拷贝到网 络,减少内存的拷贝,还有批量读批量写来提高网络读取文件的性能。
7、kafka集群搭建(通过zookeeper管理)
很简单,我们只需要编辑server.properties,
给每个节点一个brokerid,要连接的zookeeper集群信息,也可以修改日志存储目录默认是会临时目录,可能会自动清理

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值