kafka
关键字:
单个topic并发性能:多个partition
系统扩展性:多个partition分别部署在不同的broker
提升可用性:为partition加了多个副本
协调管理集群的数据消息:引入zookeeper作为协调节点
分布式环境下让多个实例同时获取到同一份信息的服务。叫做分布式协调服务。
zookeeper不但用于通用的服务注册和发现,还用于分布式锁。
消息队列实际就是一个链表,链表的每个节点就是一个消息,每个节点有一个序号,叫offset用来记录消息的位置。
生产者,消息队列,消费者
对消息进行分类,每一类是一个topic
根据不同的topic新增不同的消息队列,生产者根据topic将不同的队列投递到不同的消息队列里。
生产者按topic将消息投递到不同的队列中,消费者根据需要,订阅不同的topic。这样就大大降低了topic队列的压力
高性能:单个topic消息队列的压力可能还会过多,我们可以将单个队列拆成好几段,每段就是partition分区。
每个消费者负责一个partition 这样就提升了消息队列的性能。
高扩展性:随着partition变多,如果partition都在同一台机器上的话,就会导致单机cpu过高和内存过高。影响整体系统的性能,可以将partition分散部署在多台机器上。每一个机器就代表一个broker
高可用性:可以给partition多加几个副本,统称为replicas,将他们分为leader和follower、leader负责应付生产者和消费者的读写请求。follower只管同步leader的消息。将leader和follower分散在不同的broker上
这样leader挂了也可以迅速顶上,并且可以从follower中选取一个当作leader顶上。这样就保证了高可用。leader和follower也就是主从,主从partition之间会建立起数据同步。
持久化和过期策略:为了解决所有broker全部挂掉的问题,所以数据不仅要放在内存里,还要持久化到磁盘中,这样全挂了,数据也能在磁盘中找到。
但是如果一直写数据,磁盘迟早会炸。所以还可以给数据加上保留策略,也就是retention policy 。比如超过一定大小,或者放置磁盘中超过一定时间,就会被清理掉。
consumer group:每次这个新增的消费者都只能按最新的offset去消费partition中的,如果要在某个offset上消费,那就要用到consumer group
zookeeper:定期和broker通信,获取整个Kafka的集群状态。
浙公网安备 33010602011771号