kafka概念

来源:互联网 发布:蒲城县网络党校 编辑:程序博客网 时间:2024/06/05 19:35

broker物理机器,一个broker管多个partition

topic:一个topic可以由多个partition

partition:一个partition对应一个broker



为什么Storm需要一个消息队列?

解决和其他系统耦合的问题。

如何获取输入数据?

- Storm没有自己的接收器

- 而且从数据源拉(pull)可以更好地控制流量

如何把输出结果数据?

- Storm没有自己的存储

消息队列正好解决了数据耦合的问题。


Kafka是什么?消息队列的特点?

生产者消费者模式。

先进先出(FIFO)顺序保证

可靠性保证:

- 自己不丢数据(kafka默认是7天,清除

- 消费者不丢数据:“至少一次,严格一次”

至少一次就是可能会有两次、会重

严格一次机制就是会负责一点


消息队列常见场景:

系统之间解耦合

- queue模型

- publish-subscribe模型

峰值压力缓冲

异步通信


kafka的架构:


produce:消息生产者

consumer:消息消费者

broker:kafka集群的server,负责处理消息读、写请求,存储消息。(物理概念)

topic:消息队列/分类

Queue:里面有生产者消费者模型

broker就是代理,在kafka cluster这一层里面,其实里面有很多个broker

topic就相当于queue

元信息是存在Zookeeper上面的,整个集群的管理也和Zookeeper有很大的关系。


一个topic分成多个partition(物理概念)。

每个partition内部消息强有序,其中的每个消息都有一个序号叫offset。

一个partition只对应一个broker。

一个broker可以管多个partition。

消息不经过内部缓冲,直接写入文件。

根据时间策略删除,而不是消费完就删除。

producer自己决定往哪个partition写消息,可以是轮询的负载均衡,或者是基于hash的partition策略。


一个partition对应一个broker,一个broker可以管多个partition,比如说:topic有6个partition,有两个broker,那么每个broker就管3个partition。


如何增加topic并行度?增加partition的个数。


一个partition可想象为一个文件,当数据发过来的时候它就往这个partition上面append,追加就行。


consumer自己维护消费到哪个offset。

每个consumer都有对应的group。

group内是queue消费模型:

- 各个consumer消费不同的partition

- 因此一个消息在group内只消费一次

group间是publish-subscribe消费模型

- 各个group各自独立消费,互不影响

- 因此一个消息在被每个group消费一次


kafka的特点:

消息系统的特点:生产者消费者模型 FIFO

消息系统基本的特点是保证了,有基本的生产者消费者模型,partition内部是FIFO,partition之间不是FIFO的,当也可以把topic设置为一个partition,这样就保证了严格的FIFO。

高性能:单节点支持上千个客户端,MB/S吞吐

接近网卡的极限。

持久性:消息直接持久化在普通磁盘上且性能好

直接写到磁盘里面去,就是直接append到磁盘里面去,这样的好处是直接持久化,数据不会丢,第二个好处就是顺序写,然后消费数据也是顺序读,所以持久化的同时还能保证顺序,比较好,因为磁盘顺序读比较好。

分布式:数据副本冗余、流量负载均衡、可扩展

分布式,数据副本,也就是同一份数据可以到不同的broker上面去,也就是当一份数据,磁盘坏掉的时候,数据不会丢失,比如3个副本,就是在3个机器磁盘都换掉的情况下数据才会丢失,在大量使用情况下看这样就是非常好的,负载均衡,可扩展,在线扩展,不需要停服务的。

很灵活:消息长时间持久化、Client维护消费者状态

消费方式灵活,第一个原因是消息持久化时间跨度比较长,一天或者一星期等,第二消费状态自己维护消费到哪个地方了,Queue模型,发布订阅的模型还有回滚模型。





原创粉丝点击