kafka笔记

1、kafka基本概念

kafka是一个支持离线和在线的、分布式、可分区、可复制消息队列。

producer1,producer2 -----(topic)----->kafka cluster-----(topic)----->consumer1,consumer2

client与server通过TCP协议通信

2、producer

producer通过topic将消息发送到消息队列,consumer通过订阅topic从消息队列消费对应的消息。

3、consumer 

一对多的消费模式中,多个消费者都属于一个消费组。订阅对应topic的消费者,在收到对应topic消息过来时,消息会在所有的消费者之间实现负载均衡。如果消费者具有不同的组,消息会被以广播形式发送给“发布-订阅”中的订阅者。(没懂,感觉类似)

kafka不会维护producer和consumer的状态信息,保活通过zookeeper完成。

4、消费方式

传统的消息传递有两种方式: 队列方式(queuing)、发布-订阅(publish-subscribe)方式.

队列方式:一组消费者从机器上读消息,每个消息只传递给这组消费者中的一个。

分布-订阅方式:消息被广播到所有的消费者。Kafka提供了一个消费组(consumer group)的说法来概括这两种方式。

5、broker

一台kafka server就是一个broker

一个broker包含多个topic

6、partition

(1)为什么要分区?

订阅同一个topic的消息者,通过不同partion实现隔离。

以partition为单位读写,提高高并发。

kafka replication策略是基于partition的, 而不是基于topic。
(2)分区原则

a)指定了partition则直接使用。

b)未指定partition,但指定了key,对key的value进行一次hash出一个partition。

c)patition和key均未指定,rotate一个partition。

提供者和消费者是一对多的映射关系,每个topic被划分为多个partition,从而映射到多个消费者。每个消费者会被分配一个分区,消费者数目不会超过分区数。partition之间相互隔离,每个partition在存储层面就是append log。

(3) partition中文件存储方式

partition在物理上被切分成多个大小相等的segment组成,每个segment消息数不一定相等。这样方便老的segment生命周期管理。

 

上图来源于网络, 如有侵权,请联系删除。

7、topics & logs

发送到partition的消息会被以log形式追加到log尾部。消息在存储文件中的位置称为偏移量offset,offset唯一地标记一条消息。

Anatomy of topic:

patition0 0 1 2 3 4 5 6 7 8 9 10 (<-----write )

patition1 0 1 2 3 4 5 6 7 8 9 10 (<-----write )

patition2 0 1 2 3 4 5 6 7 8 9 10 (<-----write )

old------------------->new

8、distribution

一个Topic 的多个partitions,被分布在kafka 集群中的多个server 上;每个server(kafka 实例)负责partitions中消息的读写操作;此外kafka 还可以配置partitions 需要备份的个数(replicas),每个partition 将会被备份到多台机器上,以提高可用性。

如果Topic 的"replication factor"(备份因子)为N,那么允许N-1 个kafka实例失效。

基于replicated(冗余) 方案,那么就意味着需要对多个备份进行调度;每个partition 都有一个机器为"leader";零个或多个机器作为follower。leader 负责所有的读写操作,follower执行leader的指令。如果leader 失效,那么将会有其他follower 来接管(成为新的leader);follower只是单调的和leader 跟进,同步消息即可。由此可见作为leader 的server 承载了全部的请求压力,因此从集群的整体考虑,有多少个partitions就意味着有多少个"leader",kafka会将"leader"均衡的分散在每个实例上,来确保整体的性能稳定。

9、存储策略

被消费掉的消息并不会被立即删除,文件系统会根据broker中配置,定时删除已消费的和未被消费的消息,从而减少磁盘空间和IO开销。

Kafka有两种策略:

(1)基于时间:log.retention.hours=168

(2)基于大小:log.retention.bytes=1073741824

kafka读取特定消息时间复杂度为O(1),与文件系统大小无关,所以删除过期文件对提升kafka性能无关?

10、顺序性

kafka保证一个分区内的消息是顺序消费的。

对于消费者而言,它们消费消息的顺序和日志中消息顺序一致。

所以,如果要保证消息是全局有序的,可以设置topic只有一个分区,但这也意味着只有一个消费者。

11、kafka节点保活

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值