单机安装

1. 安装 java

2. 安装 zookeeper    【这一步可以没有,因为 kafka 自带了 zookeeper】

3. 安装 kafka

下载链接 kafka

kafka 是 scalar 开发的,解压后的后的文件名 包含两个版本号,第一个是 scalar 版本,第二个是 kafka 版本,注意一定要比较新的版本。

解压

启动 zookeeper 服务;如果使用 kafka 自带的 zookeeper,也需要先启动 ,自带 zk 启动命令为

bin/zookeeper-server-start.sh config/zookeeper.properties

修改 kafka 配置,server.properties,一般不用大改,需要注意的就是 设定 zookeeper.connect=localhost:port 的端口等于启动的 zookeeper 服务的端口

启动 kafka 服务器,输出如下所示

[root@localhost kafka_2.-0.9.0.0]# bin/kafka-server-start.sh config/server.properties
[-- ::,] INFO KafkaConfig values:
advertised.host.name = null
metric.reporters = []
quota.producer.default =
offsets.topic.num.partitions =
log.flush.interval.messages =
auto.create.topics.enable = true

启动服务器之后,可以 ps 查看到进程;可以在 logs/server.log 查看启动日志

停止服务器

bin/kafka-server-stop.sh config/server.properties

后台启动服务器

加参数  -daemon

基本操作

主题 topic 操作

kafka-topics.sh:用于在服务器上各种操作 topic,该命令位于 kafka 安装路径的bin下

创建 topic

--create:创建 topic

--zookeeper:指定 zookeeper

--replication-factor:指定副本数,副本数不能大于 broker 数

--partitions:指定分区

--topic:指定 topic name

[root@localhost kafka_2.-0.9.0.0]# bin/kafka-topics.sh --create --zookeeper localhost: --replication-factor  --partitions  --topic test
Created topic "test".

创建成功后,可以在 server.properties 配置文件 log.dirs 指定的路径下看到创建 topic 的 log

查看 topic 名字

[root@localhost kafka_2.-0.9.0.0]# bin/kafka-topics.sh --list --zookeeper localhost:
test

查看某个 topic 具体信息

[root@localhost kafka_2.-0.9.0.0]# bin/kafka-topics.sh --create --zookeeper localhost: --replication-factor  --partition  --topic sq
Created topic "sq". [root@localhost kafka_2.-0.9.0.0]# bin/kafka-topics.sh --describe --zookeeper localhost: --topic sq
Topic:sq PartitionCount: ReplicationFactor: Configs:
Topic: sq Partition: Leader: Replicas: ,, Isr: ,,
Topic: sq Partition: Leader: Replicas: ,, Isr: ,,
Topic: sq Partition: Leader: Replicas: ,, Isr: ,,
Topic: sq Partition: Leader: Replicas: ,, Isr: ,,

Replicas: 代表 副本位于哪个服务器,排在最前面的起作用,就是每个分区的 leader,优先使用这个服务器上的 副本,如果挂了,再切到其他服务器的副本;

Isr:kafka 集群中可用的 broker.id 列表,用来同步副本

消息队列

启动生产者创建消息

producer.properties 指定了生产者的属性,如 metadata.broker.list=localhost:9092,...

bin/kafka-console-producer.sh --broker-list localhost: --topic test

--broker-list:代理列表,当前数据流向哪个 broker

--topic:主题名

启动消费者获取消息

consumer.properties 指定了消费者的属性,如 zookeeper.connect=127.0.0.1:2181,...

bin/kafka-console-consumer.sh --zookeeper localhost: --topic test --from-beginning

--zookeeper :kafka topic 的元数据存放在 zk 中,所以指定 zk

--from-beginning:从头开始获取消息

  // 具体来说是这样的,比如生产者一连发了好多消息,消费者不管是发送的时候已经启动,还是发完再启动,它都能获取 1-end 全部消息,即使 生产者已经关闭了,也可以获取

  // 如果没有 这个参数,消费者只能获取 他被启动以后 发送的消息

=========================== 2020/4/10 日更新 ===========================

新版本更新 (kafka_2.11-2.2.0)

1. 新版本的 生产者、消费者 都交给了 kafka 节点;

消费者的操作更新为

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic 9911

zookeeper 换成了  bootstrap-server;后面的 ip-port 换成了 kafka 服务,而不是 zookeeper 服务

2. 数据保存在 kafka 中,而 原来保存在 zk

数据保存的配置在 server.properties/log.dirs=/tmp/kafka-logs;

而之前版本在 zookeeper.properties/dataDir=/tmp/zookeeper

这是 consumer 的 offset,保存在 kafka 的 log_dirs

安装配置 与 操作的对应关系

描述了 在 实际 操作中,哪些 操作 对应了 哪些 配置参数

消费者--黑名单(blacklist)和白名单(whitelist)选项:

--blacklist 后面跟需要过滤的topic的列表,使用","隔开,意思是除了列表中的topic之外,都能接收其它topic的数据
--whitelist 后面跟需要过滤的topic的列表,使用","隔开,意思是除了列表中的topic之外,都不能接收其它topic的数据
eg:
kafka-console-consumer.sh --zookeeper uplooking01: --from-beginning --blacklist hadoop,hive
kafka-console-consumer.sh --zookeeper uplooking01: --from-beginning --whitelist hadoop,flume

集群安装

由于只有一台服务器,本次执行伪分布式集群安装,与真正的集群安装过程雷同。

kafka 没有主从关系;

在安装分布式 kafka 之前,可以不安装分布式的 zookeeper,单机 zk 即可

安装过程

以3个节点为例

第一步,新建3个配置文件,server1.properties,server2.properties,server3.properties    【或者建2个,原来的也算一个,总共3个】

修改以下几个参数

broker.id=
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs1

3个配置文件中这几个参数不能相同

第二步,新建上面的3个路径,存储 topic 日志

第三步,分别启动这3个 kafka

kafka 启动成功后,会在 zookeeper 中创建节点,进入 zookeeper 客户端即可查看

bin/zkCli.sh -server localhost:
[zk: localhost:(CONNECTED) ] ls /
[admin, brokers, config, consumers, controller, controller_epoch, isr_change_notification, zookeeper]
[zk: localhost:(CONNECTED) ] get brokers/ids/
Path must start with / character
[zk: localhost:(CONNECTED) ] get /brokers/ids/
{"jmx_port":-,"timestamp":"","endpoints":["PLAINTEXT://localhost:9093"],"host":"localhost","version":,"port":}

我们看到了 kafka 服务的配置

基本操作

主题 topic 操作

基本同单机

创建 topic

bin/kafka-topics.sh --create --zookeeper localhost: --replication-factor  --partitions  --topic yanshw

3 台服务器,所以 副本设置为3,当然可以是1,2,比3小就行了

describe

[root@localhost kafka_2.-0.9.0.0]# bin/kafka-topics.sh --describe --zookeeper localhost: --topic yanshw
Topic:yanshw PartitionCount: ReplicationFactor: Configs:
Topic: yanshw Partition: Leader: Replicas: ,, Isr: ,,

输出第一行代表分区摘要,分别是 主题,分区,副本,

输出第二行代表 领导者 所在分区,Leader:12 中的 12 是 server.properties 中的参数 broker.id,Replicas: 12,0,10 代表 副本位于哪个服务器,排在最前面的起作用;Isr:kafka 集群中可用的 broker.id 列表

这里有个小发现:我实验单机时,开启一个kafka服务,id=0,后来我实验集群,复制了3份配置文件,分别设置 id 为 10,11,12,后来都启动成功了,但是之前的 单机服务没关闭,也就是 变成了 4个节点,而副本数是3,于是随机选了3台存放副本

消息队列

方式同单机

生产者

[root@localhost kafka_2.-0.9.0.0]# bin/kafka-console-producer.sh --broker-list localhost: --topic yanshw
a
b

这个端口是 producer.properties 生产者配置中的 metadata.broker.list=localhost:9092

消费者

[root@localhost kafka_2.-0.9.0.0]# bin/kafka-console-consumer.sh --zookeeper localhost: --topic yanshw --from-beginning
a
b

其他操作

修改主题

只能修改分区个数,且只能增加,不能减少

bin/kafka-topics.sh --zookeeper localhost: --alter --topic yanshw --partitions 

修改为4个分区

删除主题

[root@localhost kafka_2.-0.9.0.0]# bin/kafka-topics.sh --zookeeper localhost: --delete --topic yanshw
Topic yanshw is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.

注意,这个操作之后, topic 只是标记为 待删除,并没有真正删除。

如果 delete.topic.enable 没有设置为 true,这个操作不会有任何影响。

查看消费者分组

消费者分组无需事先指定,在读数据时随意指定名字,会自动创建分组

[root@node0 kafka_2.11-2.2.0]# bin/kafka-consumer-groups.sh --bootstrap-server node0:9092 --list
111
123456
console-consumer-17565

 查看某个分组的信息

[root@node0 kafka_2.11-2.2.0]# bin/kafka-consumer-groups.sh --bootstrap-server node0:9092 --group 111 --describe

TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                             HOST            CLIENT-ID
91107 0 9 9 0 kafka-python-1.4.6-a6a9e3ff-e677-4ed9-80aa-ee1dd9ea35d8 /172.16.95.55 kafka-python-1.4.6
91107 1 6 6 0 kafka-python-1.4.6-a6a9e3ff-e677-4ed9-80aa-ee1dd9ea35d8 /172.16.95.55 kafka-python-1.4.6
91107 2 5 5 0 kafka-python-1.4.6-a6a9e3ff-e677-4ed9-80aa-ee1dd9ea35d8 /172.16.95.55 kafka-python-1.4.6
91101 1 179 179 0 - - -
91101 2 206 222 16 - - -

参考资料:

https://www.w3cschool.cn/apache_kafka/apache_kafka_installation_steps.html  Apache Kafka 安装步骤

https://www.w3cschool.cn/apache_kafka/apache_kafka_basic_operations.html  Apache Kafka 基本操作

https://blog.51cto.com/xpleaf/2090847    讲些比较深一些

https://blog.csdn.net/hg_harvey/article/details/79174104  各种情况下的安装

Kafka 教程(二)-安装与基础操作的更多相关文章

  1. 项目实战12.1—企业级监控工具应用实战-zabbix安装与基础操作

    无监控,不运维.好了,废话不多说,下面都是干货. 警告:流量党勿入,图片太多!!! 项目实战系列,总架构图 http://www.cnblogs.com/along21/p/8000812.html ...

  2. ArcGIS Pro 简明教程(2)基础操作和简单制图

    ArcGIS Pro 简明教程(2)基础操作和简单制图 By 李远祥 本章主要介绍ArcGIS Pro如何加载数据并进行简单的地图制作,以基本的操作为主. 上一章节介绍过,ArcGIS Pro是可以直 ...

  3. mysql二进制安装及基础操作

    mysql二进制安装及基础操作 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    mysql-5.6.36-linux-glibc2.5-x86_64 1.安装 采用二进 ...

  4. 二、Docker基础操作

    原文:二.Docker基础操作 一.下载镜像 命令:docker pull xxxxxx(镜像名) docker pull training/weapp 二.运行镜像 docker run -d -P ...

  5. 前端(十二)—— JavaScript基础操作:if语句、for循环、while循环、for...in、for...of、异常处理、函数、事件、JS选择器、JS操作页面样式

    JavaScript基础操作 一.分支结构 1.if语句 if 基础语法 if (条件表达式) { 代码块; } // 当条件表达式结果为true,会执行代码块:反之不执行 // 条件表达式可以为普通 ...

  6. WindowsServer2012 R2 64位中文标准版(IIS8.5)下手动搭建PHP环境详细图文教程(二)安装IIS8.5

    //来源:http://www.imaoye.com/Technology/WindowsServer2012R264IIS85.html 阿里云服务器ECS Windows Server 2012 ...

  7. Odoo 二次开发教程(二)-模块的基础构建

    注:本篇及后续均以8.0为基础. 一. Odoo模块的构成 __init__.py 文件是python包导入所必须的文件,内容可以为空,通常情况下我们用来导入自己写的py文件. __openerp__ ...

  8. redis安装及基础操作(1)

    ============================================================= 编译安装 0.环境 Linux:centos6.5 redis:3.0.5 ...

  9. W3School Redis教程(安装/基本操作/高级操作/命令/官方文档/官方集群教程)

    说明:Redis有自身的客户端连接软件,也可以使用Telnet进行连接操作. 来自W3School的Redis教程,基本上涵盖了从安装到状态监控的教程. W3School:https://www.gi ...

随机推荐

  1. Make文件(一)

    基本规则: 目标:依赖 (tab)规则 目标:需要生成的目标文件 依赖:生成该目标所需的一些文件 规则:由依赖文件生成目标文件的手段 tab:每条规则前必须以tab开头,使用空格不行. 例如: /** ...

  2. R_Studio中对xls文件学生总成绩统计求和

    我们发现这张xls表格是没有学生总分的,在xls文件中计算学生总分嫌麻烦时,可以考虑在R Studio中自定义R Script脚本来解决实际问题(计算每个学生的总成绩) .xls数据表中的数据(关键信 ...

  3. Android_(游戏)打飞机01:前言

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  4. JS利用XMLHttpRequest拦截ajax请求

    function XMLHttpRequestBreak(fun=()=>false){ let f = XMLHttpRequest.prototype.open; let add = fun ...

  5. 第七周课程总结 & 实验报告(五)

    第七周课程总结 一.抽象类与接口的应用 1.实例化 2.实际应用 ---模板设计(抽象类) ---制定标准(接口) 3.设计模式 ---工厂设计 ---代理设计 ---适配器设计 二.抽象类与接口之间 ...

  6. synchronized与Lock区别简单总结

    类别 synchronized Lock 存在层次 Java的关键字,在jvm层面上 是一个类 锁的释放 1.以获取锁的线程执行完同步代码,释放锁 2.线程执行发生异常,jvm会让线程释放锁 在fin ...

  7. MethodChannel 实现flutter 与 原生通信

    Flutter 步骤 目的:在flutter页面中主动调用原生页面中的方法. 1 在widget中,定义MethodChannel变量 static const MethodChannel metho ...

  8. TCP keepalive的详解(解惑)

    TCP是面向连接的,一般情况,两端的应用程序可以通过发送和接收数据得知对端的存活. 当两端的应用程序都没有数据发送和接收时,如何判断连接是否正常呢? 这就是SO_KEEPALIVE的作用. 1. SO ...

  9. golang context学习记录1

    1.前言 一个请求,可能涉及多个API调用,多个goroutine,如何在多个API 之间,以及多个goroutine之间协作和传递信息,就是一个问题. 比如一个网络请求Request,需要开启一些g ...

  10. Android IdleHandler 原理浅析

    IdleHandler:空闲监听器(就像我没事做了,在群里发了个表情,这时候其他人就知道我很闲了) 在每次next获取消息进行处理时,发现没有可以处理的消息(队列空,只有延时消息并且没到时间,同步阻塞 ...