Kafka基本操作命令

Kafka基本操作命令

  • 一、任务描述
  • 二、任务目标
  • 三、任务环境
  • 四、任务分析
  • 五、 任务实施
    • 步骤1、Kafka基本操作命令

原创申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址
全文共计5753字,阅读大概需要3分钟
欢迎关注我的个人公众号:不懂开发的程序猿

一、任务描述

本实验任务主要完成基于ubuntu环境掌握Kafka基本操作命令的工作。通过完成本实验任务,要求学生熟练掌握Kafka基本操作命令,为后续实验的开展奠定Kafka平台基础,也为从事大数据平台运维工程师、大数据技术支持工程师等岗位工作奠定夯实的技能基础。

二、任务目标

1、掌握基于Kafka基本操作命令

三、任务环境

Ubuntu(三台节点:mater,slave1,slave2)、Zookeeper3.4.5、Kafka2.9.2

四、任务分析

Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。
Kafka基本操作命令_第1张图片

一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),每个partition在存储层面是append log文件。任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它是唯一标记一条消息。它唯一的标记一条消息。kafka并没有提供其他额外的索引机制来存储offset,因为在kafka中几乎不允许对消息进行“随机读写“。
Kafka基本操作命令_第2张图片

kafka和JMS(Java Message Service)实现(activeMQ)不同的是:即使消息被消费,消息仍然不会被立即删除.日志文件将会根据broker中的配置要求,保留一定的时间之后删除;比如log文件保留2天,那么两天后,文件会被清除,无论其中的消息是否被消费.kafka通过这种简单的手段,来释放磁盘空间,以及减少消息消费之后对文件内容改动的磁盘IO开支。
  对于consumer而言,它需要保存消费消息的offset,对于offset的保存和使用,有consumer来控制;当consumer正常消费消息时,offset将会”线性”的向前驱动,即消息将依次顺序被消费.事实上consumer可以使用任意顺序消费消息,它只需要将offset重置为任意值。
  kafka集群几乎不需要维护任何consumer和producer状态信息,这些信息有zookeeper保存;因此producer和consumer的客户端实现非常轻量级,它们可以随意离开,而不会对集群造成额外的影响。
  partitions的设计目的有多个.最根本原因是kafka基于文件存储.通过分区,可以将日志内容分散到多个server上,来避免文件尺寸达到单机磁盘的上限,每个partiton都会被当前server(kafka实例)保存;可以将一个topic切分多任意多个partitions,来消息保存/消费的效率.此外越多的partitions意味着可以容纳更多的consumer,有效提升并发消费的能力。
  Producer将消息发布到指定的Topic中,同时Producer也能决定将此消息归属于哪个partition;比如基于”round-robin”方式或者通过其他的一些算法等。
  本质上kafka只支持Topic.每个consumer属于一个consumer group;反过来说,每个group中可以有多个consumer.发送到Topic的消息,只会被订阅此Topic的每个group中的一个consumer消费。
  如果所有的consumer都具有相同的group,这种情况和queue模式很像;消息将会在consumers之间负载均衡。
  如果所有的consumer都具有不同的group,那这就是发布-订阅;消息将会广播给所有的消费者。
  在kafka中,一个partition中的消息只会被group中的一个consumer消费;每个group中consumer消息消费互相独立;我们可以认为一个group是一个”订阅”者,一个Topic中的每个partions,只会被一个”订阅者”中的一个consumer消费,不过一个consumer可以消费多个partitions中的消息.kafka只能保证一个partition中的消息被某个consumer消费时,消息是顺序的.事实上,从Topic角度来说,消息仍不是有序的。
  kafka的设计原理决定,对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。
  我们的任务是:

  1. 学会使用Kafka基本操作命令。

五、 任务实施

步骤1、Kafka基本操作命令

进入到zookeeper bin文件下,通过命令【./zkServer.sh start】来启动服务。如图1所示。

Kafka基本操作命令_第3张图片

图1 启动Zookeeper集群
  利用【./zkServer.sh status】查看Zookeeper节点状态。如图2所示。

在这里插入图片描述

图2 master查看Zookeeper节点状态
  进入到kafka bin文件下,通过命令【./kafka-server-start.sh ../config/server.properties】来启动服务。如图3所示。

Kafka基本操作命令_第4张图片

图3 启动Kafka
  查看是否启动。在各个节点重启终端,执行【jps】命令,可以看到新启动进程。如图4所示。

Kafka基本操作命令_第5张图片

图4 master查看进程
  在主节点master创建topic。执行【./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test】命令。如图5所示。

在这里插入图片描述

图5 创建topic

♥ 温馨提示

name Value
–create: 指定创建topic动作。
–topic: 指定新建topic的名称。
–zookeeper: 指定kafka连接zk的连接url,该值和server.properties文件中的配置项{zookeeper.connect}一样。
–config: 指定当前topic上有效的参数值。
–partitions: 指定当前创建的kafka分区数量,默认为1个。
–replication-factor: 指定每个分区的复制因子个数,默认1个。

在主节点master查看所有topic。执行【./kafka-topics.sh --list --zookeeper localhost:2181】 命令。如图6所示。

在这里插入图片描述

图6 查看所有topic
  在主节点master查看指定topic的详细信息。执行【./kafka-topics.sh --list --zookeeper localhost:2181 】命令。如图7所示。

在这里插入图片描述

图7 查看指定topic

♥ 温馨提示

name Value
–describe 指定是展示详细信息命令。
–zookeeper 指定kafka连接zk的连接url,该值和server.properties文件中的配置项{zookeeper.connect}一样。
–topic 指定需要展示数据的topic名称。

创建生产者并向test主题发送消息。执行【/simple/kafka/bin# ./kafka-console-producer.sh --broker-list localhost:9092 --topic test】命令。如图8所示。

Kafka基本操作命令_第6张图片

图8 创建生产者
  新开启一个终端创建消费者者并消费消息。执行【./kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning】命令。如图9所示。

在这里插入图片描述

图9 创建消费者
  新开启一个终端查看topic某分区偏移量最大(小)值,time为-1时表示最大值,time为-2时表示最小值。执行【./kafka-run-class.sh kafka.tools.GetOffsetShell --topic test --time -1 --broker-list localhost:9092 --partitions 0】命令。如图10所示。

在这里插入图片描述

图10 查看偏移量
  在主节点master增加topic分区数。执行【./kafka-topics.sh --zookeeper localhost:2181 --alter --topic test --partitions 10】命令。如图11所示。

在这里插入图片描述

图11 增加topic分区数

♥ 温馨提示

Kafka分区数量只允许增加,不允许减少。
  在主节点master删除topic,慎用,只会删除zookeeper中的元数据,消息文件须手动删除。执行【./kafka-topics.sh --delete --zookeeper localhost:2181 --topic test】命令。如图12所示。

在这里插入图片描述

图12 删除topic

♥ 温馨提示

默认情况下,删除是标记删除,没有实际删除这个Topic;如果运行删除Topic,两种方式:
方式一:通过delete命令删除后,手动将本地磁盘以及zk上的相关topic的信息删除即可
方式二:配置vim server.properties文件,给定参数delete.topic.enable=true,重启kafka服务,此时执行delete命令表示允许进行Topic的删除

♥ 知识链接
每一个分区(partition)都是一个顺序的、不可变的消息队列,并且可以持续的添加。分区中的消息都被分了一个序列号,称之为偏移量(offset),在每个分区中此偏移量都是唯一的。Kafka集群保持所有的消息,直到它们过期,无论消息是否被消费了。实际上消费者所持有的仅有的元数据就是这个偏移量,也就是消费者在这个log中的位置。 这个偏移量由消费者控制。 一个消费者的操作不会影响其它消费者对此log的处理。 Kafka中采用分区的设计有几个目的。可以处理更多的消息,不受单台服务器的限制。Topic拥有多个分区意味着它可以不受限的处理更多的数据。

Kafka基本操作命令_第7张图片

你可能感兴趣的:(大数据运维基础,kafka,分布式,大数据)