概述
Kafka是一种分布式的,基于发布/订阅的消息系统。使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。
框架
Kafka.png术语
-
Broker:一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic,这种服务器被称为broker 代理、中介者
-
Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为 Topic 主题
物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处。
新版本弥补了老版本的坑,offset可以交由Kafka内部的topic来维护,其内部默认的Partition是50个。
- Partition:Parition是物理上的概念,每个Topic包含一个或多个Partition 分割、分区
为了实现扩展性,一个非常大的topic可以分布到多个 broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。
partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体 (多个partition间)的顺序。
-
Producer:负责发布消息到Kafka broker
-
Consumer:消息消费者,向Kafka broker读取消息的客户端。
Partition : Consumer
1 : 1
N : 1
1 : N 是绝对不允许的
Partition中的数据是可以重复被利用的
在单一使用场景下,先要保证,即便是追求性能,用多个consumer,应该注意,不能一个分区被多个consumer消费
数据的重复利用在站在Group上的,但是同Group内要遵循上述原则
- Consumer Group:每个Consumer属于一个特定的Consumer Group
可为每个Consumer指定group name,若不指定group name则属于默认的group
- Zookeeper: Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance(动态负载均衡)。
AKF
AKF.png分布式:可靠性、可扩展、高性能
- X轴:副本,解决分布式的可靠性的问题
- Y轴:topic主题,各业务线数据,解决分布式的可扩展性的问题
- Z轴:Partition分区,无关的数据分散到不同的分区里,解决分布式的高性能的问题
总结
1,Topic是逻辑上的,Partition是物理上的,Topic在逻辑上可以被认为是一个QUEUE,PUSH消息时必须指定Topic,可以理解为消息要推送到哪个 QUEUE,为了提高消息队列的高吞吐率,物理上把Topic分割成一个Partition或多个Partition
2,作为一个消息系统,Kafka遵循了传统的方式,选择由Producer向broker push消息并由Consumer从broker pull消息
3,Partition消息至Consumer是push? pull?
push模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。push模式的目标是尽可能以最快速度传递消息,但是这样很容易造成Consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据Consumer的消费能力以适当的速率消费消息。
对于Kafka而言,pull模式更合适。pull模式可简化broker的设计,Consumer可自主控制消费消息的速率,同时Consumer可以自己控制消费方式——即可批量消费也可逐条消费。
4,Partition : Consumer ->>
1 : 1
N : 1
1 : N 是绝对不允许的
Partition中的数据是可以重复被利用的
在单一使用场景下,先要保证,即便是追求性能,用多个consumer,应该注意,不能一个分区被多个consumer消费
———————————————————
坐标帝都,白天上班族,晚上是知识的分享者
如果读完觉得有收获的话,欢迎点赞加关注
网友评论