Kafka 运行命令

Kafka 运行命令,第1张

一、启动ZooKeeper

打开一个新终端并键入以下命令

二、要启动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架构原理


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11972398.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存