kafkatopic数量上限_⼀⽂搞懂Kafka核⼼基础知识
Kafka是最初由Linkedin公司开发,是⼀个分布式、⽀持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最⼤的特性就是可以实时的处理⼤量数据以满⾜各种需求场景:⽐如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx⽇志、访问⽇志,消息服务等等,⽤scala语⾔编写,Linkedin于2010年贡献给了Apache基⾦会并成为顶级开源项⽬。
「下⾯这篇⽂章会从以下⽅⾯会带⼤家介绍下这个强⼤的开源项⽬,希望对⼤家收获」
940万考生赴高考快速⼊门
版本介绍
如图,当前最新的 Kafka 版本是 2.6.0,提供了两个⼆进制压缩包可供下载 。
katka_2.12 2.
katka_2.13-2.
上⾯两个⽂件中的 2.12 /2.13 分别表⽰编译 Kafka 的 Scala 语⾔版本,后⾯的 2.6.0 是 Kafka 的版本 。
其中前⾯的 2 表⽰⼤版本号,即 Major Version;中间的 6 表⽰⼩版本号或次版本号,即 Minor Version;最后的 0 表⽰修订版 本号,也就是 Patch 号。
安装教程
由于Kafka是⽤Scala语⾔开发的,运⾏在JVM上,因此在安装Kafka之前需要先安装JDK。
还有kafka也依赖zookeeper,所以需要先安装zookeeper
wget mirror./apache/zookeeper/stable/zookeeper-3.5.翻译中文
swepttar -zxvf zookeeper-3.5.
cd zookeeper-3.5.
# 启动zookeeper
bin/zkServer.sh start
bin/zkCli.sh
ls / #查看zk的根⽬录相关节点
「下载安装包」
下载并解压:
wget /dist/kafka/2.6.0/kafka_2.12-2.
tar -xzf kafka_2.12-2.
cd kafka_2.12-2.6.0
「启动服务」
bin/kafka-rver-start.sh -daemon config/rver.properties
# 我们进⼊zookeeper⽬录通过zookeeper客户端查看下zookeeper的⽬录树
bin/zkCli.sh
fenda
ls / #查看zk的根⽬录kafka相关节点
ls /brokers/ids #查看kafka节点
消息引擎模型
「我们⽤⼀句话概括Kafka就是它是⼀款开 源的消息引擎系统。」
辞职信范文其中最常见的两种消息引擎模型是点对点模型和发布/订阅模型
「点对点模型」
点对点模型是基于队列提供消息传输服务的,该模型定义了消息队列、发送者和接收者 , 提供了⼀种点对点的消息传递⽅式,即发送者发送每条消息到队列的指定位置,接收者从指定位置获取消息,⼀旦消息被消费, 就会从队列中移除该消息 。 每条消息由⼀个发送者⽣产出来, 且只被⼀个消费者处理⼀⼀发送者和消费者之间是⼀对⼀的关系
「发布/订阅模型」
发布/订阅模型与前⼀种模型不同, 它有主题(topic)的概念。 这种模型也定义了类似于⽣产者/消费者这样的⾓⾊,即发布者和订阅者,发布者将消息⽣产出来发送到指定的topic中, 所有订阅了该 topic的订阅者都可以接收到该topic下的所有消息,通常具有相同订阅 topic 的所有订阅者将接收到 同样的消息h2o
「Kafka 同时⽀持这两种消息引擎模型的,后⾯会介绍」
基本概念
消息
既然Kafka是消息引擎,这⾥的消息就是指 Kafka 处理的主要对象
Broker
broker 指⼀个 kafka 服务器。如果多个 broker 形成集群会依靠 Zookeeper 集群进⾏服务的协调管理。
⽣产者发送消息给 Kafka 服务器。消费者从 Kafka 服务器读取消息。
Topic和Partition
topic代表了⼀类消息, 也可以认为是消息被 发送到的地⽅。 通常我们可以使⽤ topic 来区分实际业务, ⽐如业务 A 使⽤ ⼀个 topic ,业务 B 使⽤另外⼀个 topic。
Kafka 中的 topic 通常都会被多个消费 者订阅, 因此出于性能的考量 , Kafka 并不是 topic-message 的两级结构, ⽽是采⽤了 topic-看美剧
partition-messa ge 的三级结构来分散负 载。 从本质上说, 每个 Kafka topic 都由若⼲个 partition 组成
bq是什么意思
如图: topic 是由多个 partition 组成的, ⽽ Kafka 的 partition 是不可修改的有序消 息序列, 也可以
说是 有序的消息⽇志。 每个partition 有⾃⼰专属的 partition 号, 通常是从 0 开始的。 ⽤户对 partition 唯⼀能做的操作就是 在消息序列的尾部追 加写⼊消息。partition 上的每条消息都会被分配⼀个唯⼀ 的序列号
该序列号被称为位移( offt ) 是从 0 开始顺序递增 的整数。 位移信息可以 唯⼀定位到某 partition 下的⼀条消息 。
「kafka为什么要设计分区?」
解决伸缩性的问题。假如⼀个broker积累了太 多的数据以⾄于单台 Broker 机器都⽆法容纳了,此时应该怎么办呢?⼀个很⾃然的想法就是,能否把数据分割成多份保存在不同的 Broker 上?所以kafka设计了分区
nth
⽣产者和消费者
向主题发布消息的客户端应⽤程序称为⽣产者(Producer),⽣产者程序通常持续不断地 向⼀个或多个主题发送消息,⽽订阅这些主题消息的客户端应⽤程序就被称为消费者 (Consumer)。和⽣产者类似,消费者也能够同时订阅多个主题的消息
消费者组
Consumer Group 是指组⾥⾯有多个消费者或消费者实例,它 们共享⼀个公共的 ID,这个 ID 被称为 Group ID。组内的 所有消费者协调在⼀起来消费订阅主题的所有分区(Partition)。当然,每个分区只能由 同⼀个消费者组内的⼀个 Consumer 实例来消费。
「Consumer Group 三个特性。」
1. Consumer Group 下可以有⼀个或多个 Consumer 实 例。
排山倒海英文版2. Group ID 是⼀个字符串,在⼀个 Kafka 集群中,它标识 唯⼀的⼀个 Consumer Group。
3. Consumer Group 下所有实例订阅的主题的单个分区, 只能分配给组内的某个 Consumer 实例消费。这个分区 当然也可以被其他
的 Group 消费。
「还记得上⾯提到的两种消息引擎模型」
Kafka 仅仅使⽤ Consumer Group 这⼀种机制,却同时实现了传统消息引 擎系统的两⼤模型:如果所有实例都属于同⼀个 Group, 那么它实现的就是点对点模型;如果所有实例分别属于不 同的 Group,那么它实现的就是发布 / 订阅模型。