接触kafka开发已经两年多,也看过关于kafka的一些书,但一直没有怎么对它做总结,借着最近正好在看《Apache Kafka实战》一书,同时自己又搭建了三台kafka服务器,正好可以做一些总结记录。

本文主要是记录如何在kafka集群服务器上创建topic,查看topic列表、分区、副本详情,删除topic,测试topic发送与消费,算是最基础的操作了,当然,不同版本其实指令是有所差异的,本文只针对kafka 2.x版本。虽然这些指令都很简单,但久不用了,很容易就会忘记,所谓好记性不如烂笔头,记录下来会更好。

主要写给一些刚出门的小白,大神请自行绕路。

最后,推荐两本写kafka的书,我觉得挺不错的,一本是关于原理的《深入理解kafka:核心设计与实践原理》,一本就是我现在在看的,比较偏实际开发工作的《Apache Kafka实战》。这两本我觉得比较容易看懂,当然,我是先看的第一本,当时记录了一堆笔记,笔记目前放在我的GitHub上:https://github.com/z924931408/Learning-Notes-document

我会一步一步记录,从简到原理。

1、创建一个名为test-topic的topic,该topic有3个分区,每个分区分配3个副本——

./kafka-topics.sh --zookeeper zk1:2181,zk2:2181,zk3:2181 --create --topic test-topic --partitions 3 --replication-factor 3

创建成功时,会提示:Created topic test-topic.

2、查看kafka集群已有topic列表——

./kafka-topics.sh --zookeeper zk1:2181,zk2:2181,zk3:2181 -list

查询情况会显示出所有的topic名——

3、查看topic的分区与备份详细情况——

./kafka-topics.sh --zookeeper zk1:2181,zk2:2181,zk3:2181 --describe --topic test-topic

例如,我在虚拟机上查看如下

PartitionCount:表示总共有3个分区;

ReplicationFactor:表示每个分区有3个副本备份;

该kafka集群分布部署在三台机器上,三个节点的id分别为0,1,2。截图当中,显示有0,1,2的字样,即分别代表了三台节点服务器,说明该test-topic三个分区各自均匀分配在三台机器上,分区的leader副本与三个follower副本同样均匀在三台机器上,这能起到防止数据丢失的作用。

最后,还有一个ISR,该参数全称,in-sync replica,它维护了一个集合,例如截图里的2,0,1,代表2,0,1副本保存的消息日志与leader 副本是保持一致的,只有保持一致的副本(包括所有副本),才会被维护在ISR集合里,当出现一定程度的不同步时,就会将该对应已经不一致的副本移出ISR集合,但是,这种移出并非永久的,一旦被移出的副本慢慢又恢复与leader一样时,那么,又会被加回isr集合当中。注意一点,只有在这个ISR里的副本服务器,才能在leader出现问题时有机会被选举为新的leader。

4、删除topic——

./kafka-topics.sh --zookeeper zk1:2181,zk2:2181,zk3:2181 --delete --topic test-topic

执行该语句后,会显示以下信息——

Topic test-topic is marked for deletion.

Note: This will have no impact if delete.topic.enable is not set to true.

翻译过来,就是说,主题test-topic标记为删除,但如果delete.topic.enable未设置为true,这将没有影响。

也就是说,如果delete.topic.enable未设置为true,即使执行了该语句,但也不会被删除,只会被标记一个删除状态而已,该delete.topic.enable参数在1.0.0版本后都是默认true,可以通过./kafka-topics.sh --zookeeper zk1:2181,zk2:2181,zk3:2181 -list指令查看,发现确实已经被删除了,当删除topic时,会将topic分区及备份所有数据都删除完,注意一点,这种删除是异步的。

5、验证集群消息发送与消费

kafka默认提供了两个脚本:kafka-console-producer.sh与kafka-console-consumer.sh。

可以直接使用这两个脚本验证集群是否能正常发送消息与消费消息。

开启一个生产者——

 ./kafka-console-producer.sh --broker-list kafka1:9092, kafka2:9092, kafka3:9092 --topic test-topic2

在其他两台机器上分别开启两个消费者——

 ./kafka-console-consumer.sh --bootstrap-server  kafka1:9092, kafka2:9092, kafka3:9092 --topic test-topic2 --from-beginning

大概效果如下——

生产者:

消费者:

kafka2.x常用命令笔记(一)创建topic,查看topic列表、分区、副本详情,删除topic,测试topic发送与消费的更多相关文章

  1. Linux 常用命令笔记

    Linux 常用命令笔记 1. locate locate:用来定位文件的位置,如:locate a.txt 但是这个命令有延迟,也就是新建的文件不一定能搜索到,如果非要找到新建的文件可以使用 upd ...

  2. Linux常用命令 笔记

     Linux常用命令  笔记 一.文件处理命令 1. ls命令:显示目录文件                          -a 显示所有文件,包括隐藏文件.(all)               ...

  3. 04Microsoft SQL Server 数据库创建,查看,使用,修改及删除

    Microsoft SQL Server 数据库创建,查看,使用,修改及删除 创建数据库 创建普通数据库 USE [master] GO CREATE DATABASE [MyDataBase] -- ...

  4. GIT常用命令笔记

    最近在做了一个自己的项目.两个人合作的,所以需要用到版本管理工具.本来打算学一下自己搭建svn的,后来朋友推荐我用git,免费,流行,好用,逼格.所以就学习了一下.发现这个git与已经使用惯了的svn ...

  5. 《精通Linux C编程》1.3Linux系统的常用命令-笔记

    [toc] 1.3.1了解Shell Linux常用命令的运行环境就是Shell,它是一种命令解析器,在用户和操作系统之间提供了一个交互接口. 用户在命令行输入命令,然后Shell对该命令进行解析并将 ...

  6. Zookeeper命令行操作(常用命令;客户端连接;查看znode路径;创建节点;获取znode数据,查看节点内容,设置节点内容,删除节点;监听znode事件;telnet连接zookeeper)

    8.1.常用命令 启动ZK服务 bin/zkServer.sh start 查看ZK服务状态 bin/zkServer.sh status 停止ZK服务 bin/zkServer.sh stop 重启 ...

  7. git 常用命令及仓库创建

    一.常用命令 1.添加到本地仓库缓存 git add . 2.查看本地仓库状态 git status 3.提交到本地仓库 git commit -am 'project init' 4.连接线上分支 ...

  8. liunx常用命令笔记

    安装软件教程 linux安装java:https://www.cnblogs.com/lamp01/p/8932740.html linux安装mysql:https://www.cnblogs.co ...

  9. Linux常用命令 - 五种创建文件命令详解

    21篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html 创建文 ...

随机推荐

  1. Android项目的settings.gradle和build.gradle

    gradle构建的项目中的build.gradle和settings.gradle文件 build.gradle 浅析(一) 史上最全的Android build.gradle配置教程 Android ...

  2. C++之无子数

    题目如下: 1 #include <iostream> 2 3 using namespace std; 4 5 6 bool isThisNumhaveChild(int num); 7 ...

  3. mysql报错max_connections错误

    SELECT @@MAX_CONNECTIONS AS 'Max Connections';set GLOBAL max_connections=10000; show status like '%t ...

  4. Linux基础命令---mail邮件管理程序

    mail mail是一个邮件的管理程序,可以用来发送或者接收邮件. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.   1.语法       mail  [选项] ...

  5. zabbix之主动模式和proxy的主动模式

    #:找一台新主机配置上agent,注意版本要和server端保持一样 #:官网地址:https://www.zabbix.com/documentation/4.0/zh/manual/install ...

  6. Dubbo应用到web工程

    一.创建提供者03-provider-web (1) 创建工程 创建Maven的web工程,然后创建实现类. (2) 导入依赖 Spring的版本为4.3.16 需要的依赖有: dubbo2.7.0版 ...

  7. oracle体系结构(图)

  8. 最基础前端路由实现,事件popstate使用

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. numpy基础教程--二维数组的转置

    使用numpy库可以快速将一个二维数组进行转置,方法有三种 1.使用numpy包里面的transpose()可以快速将一个二维数组转置 2.使用.T属性快速转置 3.使用swapaxes(1, 0)方 ...

  10. Jenkins获取jar包的快照号

    目录 一.简介 二.脚本 一.简介 主要用于打jar包的工程,显示快照包的名字.当jar打包完成后,会在target目录中,截取快照名. 二.脚本 1.脚本return-version.sh #!/b ...