打开一个新终端并键入以下命令
二、要启动Kafka Broker,请键入以下命令
启动Kafka Broker后,在ZooKeeper终端上键入命令 jps ,您将看到以下响应
现在你可以看到两个守护进程运行在终端上,QuorumPeerMain是ZooKeeper守护进程,另一个是Kafka守护进程。
三、创建Kafka主题
四、主题列表
要获取Kafka服务器中的主题列表,可以使用以下命令
输出
五、启动生产者以发送消息
六、启动消费者以接收消息
七、单节点多代理配置
创建多个Kafka Brokers,我们在配置/ server.properties中已有一个Kafka代理实例。 现在我们需要多个代理实例,因此将现有的server.prop-erties文件复制到两个新的配置文件中,并将其重命名为server-one.properties和server-two.properties。 然后编辑这两个新文件并分配以下更改
config / server-one.properties
创建主题
让我们为此主题将复制因子值指定为三个,因为我们有三个不同的代理运行。 如果您有两个代理,那么分配的副本值将是两个。
Describe 命令用于检查哪个代理正在侦听当前创建的主题
输出
八、修改主题
Producer: 生产者,发送消息的一方。生产者负责创建消息,然后将其发送到 Kafka 服务器上。
Consumer: 消费者,接受消息的一方。消费者连接到 Kafka 服务器上并接收消息,进而进行相应的业务逻辑处理。
Consumer Group: 消费者集合,一个消费者组可以包含一个或者多个消费者。使用多分区 + 多消费者的方式,可以极大提高下游系统处理速度。同一消费者组中的消费者不会重复消费消息,不同的消费者组之间不会互相影响,都能收到全部消息。kafka就是通过消费组来实现P2P模式和广播模式的。
Broker: Kafka 服务器。
Topic: Kafka中的消息维度,一个Topic类似一个queue。生产者将消息发送到特定的Topic,消费者通过Topic进行消费。
Partition: 分区,分区是属于Topic逻辑概念下的一个分区,每个分区只属于一个Topic,一个Topic通常有多个分区,每个分区包含的消息是不同的,分区在存储层面可以看做一个可追加的日志文件,消息在被追加到分区日志文件时,会分配一个特定的便宜了(offset)。
Offset: 分区中的消息的唯一标识,用它来保证消息在分区内的顺序性,offset不跨分区,也就是说,Kafka保证消息在分区内的有序性,不保证消息在Topic下的有序性
Replication: 副本,是Kafka保证数据高可用的方式。同一Partition的数据可以在多个Broker(kafka服务器)上存在多个副本,通常只有主副本提供读尘誉写服务,当主副本发生故障,Kafka会在Controller的管理下,选择新的副本作为主副本提供读写服务
Follower: 从副本,相对于主副本,从副本只同步主副本数据,不提供读写服务。
Record: 写入kafka中的消息,每个消息包含了key、value和timestamp。
生产者-消费者是一种设计模式,是在生产者和消费者之间添加一个中间件来达到解耦的目的。
Zookeeper是一个成熟的分布式协调服务,它可以为分布式服务提供分布式配置服务、同步服务和命名注册等能力。任何分布式服务都需要一种协调任务的方法,Kafka使用Zookeeper来进行任务协调,也有一些其他技术具有自己的内置任务协调机制。
Kafka将Broker、Topic和Partitin的元数据存储在Zookeeper上。
Kafka使用Zookeeper完成以下功能:
Controller是从Broker中选举出来的,负责分区 Leader 和 Follower 的管理。当某个分区的 leader 副本发生变化,由Controller负责为该分区选举新的 leader 副本。当某个分区的同步副本集合发生变化时,由Controller负责通知所有Broker更新元数据信息。
Controller的选举依赖Zookeeper,成功竞选为控制器的Broker会在Zookeeper中培桐创建一个/controller临时节点。
选举过程: Broker首先尝试读取/controller节点中的brokerid值,如果brokerid值不为-1,表示已经存在Broker当选Controller,否则尝试创建/controller节点,创建成功后将当前brokerid写入/controller节点,作为 activeControllerId
主要职责: controller选举出来作派中段为整个Broker集群的管理者,管理所有集群信息和元数据。
Kafka 的网络通信模型是基于 NIO 的Reactor 多线程模型来设计的。其中包含一个Acceptor线程用于处理连接,多个 Processor 线程 select 和 read socket 请求,一个Processor 由包含多个 Handler 线程处理请求并响应。
顺序写:
零拷贝:
PageCache: producer 生成消息到 Broker 时,Broker 会使用 pwrite() 系统调用,按偏移量写入数据。写入时,会先写入 page cache。Consumer 消费消息时,Broker会使用sendfile() 系统调用,零拷贝的将数据从 page cache 传输到 Broker 的 Socket Buffer,通过网络传输。因此当Kafka的生产速率和消费速率相差不大时,就能几乎只靠 page cache 的读写完成整个生产-消费过程,磁盘访问非常少
网络模型: Kafka基于NIO,采用Reactor线程模型,实现了自己的RPC通信。 一个Acceptor线程处理新的连接,多个Processor线程select 和 read socket请求,多个Handler线程处理请求并响应(I/O多路复用)。
批量与压缩: Kafka Producer 向 Broker 发送消息不是一条一条发送,而是按批发送。且roducer、Broker 和 Consumer 使用相同的压缩算法,在 producer 向 Broker 写入数据,Consumer 向 Broker 读取数据时甚至可以不用解压缩,最终在 Consumer Poll 到消息时才解压,这样节省了大量的网络和磁盘开销。
分区并发: Kafka 的 Topic 可以分成多个 Partition,每个 Paritition 类似于一个队列,保证数据有序。同一个 Group 下的不同 Consumer 并发消费 Paritition,分区实际上是调优 Kafka 并行度的最小单元,因此,可以说,每增加一个 Paritition 就增加了一个消费并发。
文件结构:
Kafka 消息是以 Topic 为单位进行归类,各个 Topic 之间是彼此独立的,互不影响。每个 Topic 又可以分为一个或多个分区。每个分区各自存在一个记录消息数据的日志文件。
Kafka 每个分区日志在物理上实际按大小被分成多个 Segment。
index 采用稀疏索引,这样每个 index 文件大小有限,Kafka 采用mmap的方式,直接将 index 文件映射到内存,这样对 index 的 *** 作就不需要 *** 作磁盘 IO。
Kafka 充分利用二分法来查找对应 offset 的消息位置
和其他消息队列相比,Kafka的优势在哪里?
队列模型了解吗?Kafka 的消息模型知道吗?
Kafka 如何保证消息不重复消费?
kafka出现消息重复消费的原因:
解决方案:
参考1: Kafka性能篇:为何Kafka这么"快"?
参考2: Kafka原理篇:图解kakfa架构原理
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)