kafka安装部署超详细步骤

目录
  • 概述
  • Step 1: 下载代码
  • Step 2: 启动服务
  • Step 3:创建一个主题
  • Step 4: 发送消息
  • Step 5: 消费消息
  • Step 6: 设置多个broker集群(单机伪集群的配置)
  • Step 7: 测试集群的容错能力
    • 7.1发布消息到集群
    • 7.2消费消息
    • 7.3干掉leader,测试集群容错
    • 7.4再次消费消息,确认消息没有丢失

概述

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

主要应用场景是:日志收集系统和消息系统。

Kafka主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
  • 同时支持离线数据处理和实时数据处理。
  • Scale out:支持在线水平扩展

Step 1: 下载代码

你可以登录Apache kafka 官方下载。
http://kafka.apache.org/downloads.html
备注:2.11-1.1.0版本才与JDK1.7兼容,否则更高版本需要JDK1.8

Step 2: 启动服务

运行kafka需要使用Zookeeper,所以你需要先启动Zookeeper,如果你没有Zookeeper,你可以使用kafka自带打包和配置好的Zookeeper(PS:在kafka包里)。

//这是前台启动,启动以后,当前就无法进行其他操作(不推荐)
./zookeeper-server-start.sh ../config/zookeeper.properties

//后台启动(推荐)
./zookeeper-server-start.sh ../config/zookeeper.properties 1>/dev/null 2>&1 &

现在启动kafka

config/server1.properties:
	broker.id=0
	listeners=PLAINTEXT://192.168.10.130:9092
	log.dirs=kafka-logs
	zookeeper.connect=localhost:2181
//后台启动kafka
./kafka-server-start.sh ../config/server.properties 1>/dev/null 2>&1 &

Step 3:创建一个主题

  创建一个名为“test”的Topic,只有一个分区和备份(2181是zookeeper的默认端口)

./kafka-topics.sh --create --zookeeper localhost:2181 --config max.message.bytes=12800000 --config flush.messages=1 --replication-factor 1 --partitions 1 --topic test
命令解析:
--create: 指定创建topic动作

--topic:指定新建topic的名称

--zookeeper: 指定kafka连接zk的连接url,该值和server.properties文件中的配置项{zookeeper.connect}一样

--config:指定当前topic上有效的参数值,参数列表参考文档为: http://kafka.apache.org/082/documentation.html#brokerconfigs

--partitions:指定当前创建的kafka分区数量,默认为1个

--replication-factor:指定每个分区的复制因子个数,默认1个

创建好之后,可以通过运行以下命令,查看已创建的topic信息:

>./kafka-topics.sh --list --zookeeper localhost:2181
test

  或者,除了手工创建topic外,你也可以配置你的broker,当发布一个不存在的topic时自动创建topic。

  补充:
(1)查看对应topic的描述信息

./kafka-topics.sh --describe --zookeeper localhost:2181  --topic test0
命令解析:
--describe: 指定是展示详细信息命令

--zookeeper: 指定kafka连接zk的连接url,该值和server.properties文件中的配置项{zookeeper.connect}一样

--topic:指定需要展示数据的topic名称

  (2)Topic信息修改

bin/kafka-topics.sh --zookeeper 192.168.187.146:2181 --alter --topic test0 --config max.message.bytes=128000
bin/kafka-topics.sh --zookeeper 192.168.187.146:2181 --alter --topic test0 --delete-config max.message.bytes
bin/kafka-topics.sh --zookeeper 192.168.187.146:2181 --alter --topic test0 --partitions 10
bin/kafka-topics.sh --zookeeper 192.168.187.146:2181 --alter --topic test0 --partitions 3 ## Kafka分区数量只允许增加,不允许减少

  (3)Topic删除
默认情况下Kafka的Topic是没法直接删除的,需要进行相关参数配置

bin/kafka-topics.sh --delete --topic test0 --zookeeper 192.168.187.146:2181

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

Step 4: 发送消息

  Kafka提供了一个命令行的工具,可以从输入文件或者命令行中读取消息并发送给Kafka集群。每一行是一条消息。

  运行producer(生产者),然后在控制台输入几条消息到服务器。
  备注:这里的localhost:9092不是固定的,需要根据server.properties中配置的地址来写这里的地址!

[root@administrator bin]# ./kafka-console-producer.sh --broker-list localhost:9092 --topic test
>this is a message
>this is another message
//按`Ctrl+C`终止输入

Step 5: 消费消息

  Kafka也提供了一个消费消息的命令行工具,将存储的信息输出出来。
  备注:这里的localhost:9092不是固定的,需要根据server.properties中配置的地址来写这里的地址!

[root@administrator bin]# ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
this is a message
this is another message
//按`Ctrl+C`终止读取消息

  如果你有2台不同的终端上运行上述命令,那么当你在运行生产者时,消费者就能消费到生产者发送的消息。

Step 6: 设置多个broker集群(单机伪集群的配置)

  到目前,我们只是单一的运行一个broker,没什么意思。对于Kafka,一个broker仅仅只是一个集群的大小,所有让我们多设几个broker。

  首先为每个broker创建一个配置文件:

cp config/server.properties config/server-1.properties
cp config/server.properties config/server-2.properties

现在编辑这些新建的文件,设置以下属性:

vim config/server.properties
config/server1.properties:
	broker.id=0
	listeners=PLAINTEXT://192.168.10.130:9092
	log.dirs=kafka-logs
	zookeeper.connect=localhost:2181

config/server-1.properties:
    broker.id=1
	listeners=PLAINTEXT://192.168.10.130:9093
	log.dirs=kafka-logs-1
	zookeeper.connect=localhost:2181

config/server-2.properties:
    broker.id=2
	listeners=PLAINTEXT://192.168.10.130:9094
	log.dirs=kafka-logs-2
	zookeeper.connect=localhost:2181

  备注1listeners一定要配置成为IP地址;如果配置为localhost或服务器的hostname,在使用java发送数据时就会抛出异 常:org.apache.kafka.common.errors.TimeoutException: Batch Expired 。因为在没有配置advertised.host.name 的情况下,Kafka并没有像官方文档宣称的那样改为广播我们配置的host.name,而是广播了主机配置的hostname。远端的客户端并没有配置 hosts,所以自然是连接不上这个hostname的。

  备注2:当使用java客户端访问远程的kafka时,一定要把集群中所有的端口打开,否则会连接超时

/sbin/iptables -I INPUT -p tcp --dport 9092 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 9093 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 9094 -j ACCEPT
/etc/rc.d/init.d/iptables save

  broker.id是集群中每个节点的唯一且永久的名称,我们修改端口和日志目录是因为我们现在在同一台机器上运行,我们要防止broker在同一端口上注册和覆盖对方的数据。

  我们已经运行了zookeeper和刚才的一个kafka节点,所有我们只需要在启动2个新的kafka节点。

./kafka-server-start.sh ../config/server-1.properties 1>/dev/null 2>&1 &
./kafka-server-start.sh ../config/server-2.properties 1>/dev/null 2>&1 &

  现在,我们创建一个新topic,把备份设置为:3

./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

  好了,现在我们已经有了一个集群了,我们怎么知道每个集群在做什么呢?运行命令“describe topics”

> ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
//所有分区的摘要
Topic:my-replicated-topic    PartitionCount:1    ReplicationFactor:3    Configs:
//提供一个分区信息,因为我们只有一个分区,所以只有一行。
Topic: my-replicated-topic    Partition: 0    Leader: 1    Replicas: 1,2,0    Isr: 1,2,0
  • “leader”:该节点负责该分区的所有的读和写,每个节点的leader都是随机选择的。
  • “replicas”:备份的节点列表,无论该节点是否是leader或者目前是否还活着,只是显示。
  • “isr”:“同步备份”的节点列表,也就是活着的节点并且正在同步leader

  其中ReplicasIsr中的1,2,0就对应着3个broker他们的broker.id属性!

  我们运行这个命令,看看一开始我们创建的那个节点:

> ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
Topic:test    PartitionCount:1    ReplicationFactor:1    Configs:
Topic: test    Partition: 0    Leader: 0    Replicas: 0    Isr: 0

  这并不奇怪,刚才创建的主题没有Replicas,并且在服务器“0”上,我们创建它的时候,集群中只有一个服务器,所以是“0”。

Step 7: 测试集群的容错能力

7.1发布消息到集群

[root@administrator bin]# ./kafka-console-producer.sh --broker-list 192.168.10.130:9092 --topic my-replicated-topic
>cluster message 1
>cluster message 2
//Ctrl+C终止产生消息

7.2消费消息

[root@administrator bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.10.130:9093 --from-beginning --topic my-replicated-topic
cluster message 1
cluster message 2
//Ctrl+C终止消费消息

7.3干掉leader,测试集群容错

首先查询谁是leader

> ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
//所有分区的摘要
Topic:my-replicated-topic    PartitionCount:1    ReplicationFactor:3    Configs:
//提供一个分区信息,因为我们只有一个分区,所以只有一行。
Topic: my-replicated-topic    Partition: 0    Leader: 1    Replicas: 1,2,0    Isr: 1,2,0

  可以看到Leaderbroker.id1,找到对应的Broker

[root@administrator bin]# jps -m
5130 Kafka ../config/server.properties
4861 QuorumPeerMain ../config/zookeeper.properties
1231 Bootstrap start start
7420 Kafka ../config/server-2.properties
7111 Kafka ../config/server-1.properties
9139 Jps -m

  通过以上查询到LeaderPIDKafka ../config/server-1.properties)为7111,杀掉该进程

//杀掉该进程
kill -9 7111
//再查询一下,确认新的Leader已经产生,新的Leader为broker.id=0
[root@administrator bin]# ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic       PartitionCount:1        ReplicationFactor:3    Configs:
//备份节点之一成为新的leader,而broker1已经不在同步备份集合里了
Topic: my-replicated-topic      Partition: 0    Leader: 0       Replicas: 1,0,2 Isr: 0,2

7.4再次消费消息,确认消息没有丢失

[root@administrator bin]# ./kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic
cluster message 1
cluster message 2

  消息依然存在,故障转移成功!!

到此这篇关于kafka安装部署的文章就介绍到这了,更多相关kafka安装部署内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • docker部署kafka的方法步骤

    目录 1. 搭建docker 2.进入容器 3.修改配置文件 4.测试kafka 1. 搭建docker 这里我直接用的是docker-compose部署,所以需要提前安装好compose. 既然要用compose那么yml文件自然是少不了的. 首先要新建一个目录,并在目录中新建一个yml文件 文件的内容如下: version: '2' services: zookeeper: image: wurstmeister/zookeeper volumes: - ./data:/data ports

  • windows下使用 intellij idea 编译 kafka 源码环境

    1. 从 GitHub 网站,git clone kafka 源码 2. 下载安装好 gradle,scala 2.1 从 dependencies.gradle 文件中找到 gradle 的版本,然后下载指定版本,并配置好 GRADLE_HOME 环境变量 3. 进入 kafka 项目目录,依次执行 gradle wrapper,gradle idea,gradle build --exclude-task test 4. 将工程导入到 idea 4.1 启动主类 kafka.Kafka 4.

  • Kafka 安装与配置详细过程

    本节详细介绍 Kafka 运行环境的搭建,为了节省篇幅,本节的内容以 Linux CentOS 作为安装演示的操作系统,其他 Linux 系列的操作系统也可以参考本节的内容.具体的操作系统的信息如下: [root@node1 ~]# uname -a Linux node1 2.6.32-504.23.4.el6.x86_64 #1 SMP Tue Jun 9 20:57:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux [root@node1 ~]# cat

  • 带你玩转Kafka之初步使用

    目录 前言 1 简单介绍 2 下载安装 3 基本使用 3.1 启动Kafka 3.2 简单测试使用 3.3 搭建多代理集群 3.3.1 开始搭建 3.3.2 使用 3.3.3 验证容错性 4 小总结 总结 前言 官方文档:http://kafka.apache.org/ 中文文档:https://kafka.apachecn.org/ Apache Kafka是分布式发布-订阅消息系统. Apache Kafka与传统消息系统相比,有以下不同: 它被设计为一个分布式系统,易于向外扩展: 它同时为

  • 一文秒懂 kafka HA(高可用)

    目录 01名词解释 02kafka HA 03kafka架构中zookeeper的结构 04broker failover 05 controller failover 我们知道,kafka中每个topic被划分为多个partition,每个partition又有多个副本,那么这些分区副本是怎么均匀的分布在整个kafka集群的broker节点上的?partition副本的leader是通过什么算法选举出来的?partition副本的follower是怎么复制备份leader的数据的?本文我们就来

  • 深入解析kafka 架构原理

     kafka 架构原理 大数据时代来临,如果你还不知道Kafka那就真的out了!据统计,有三分之一的世界财富500强企业正在使用Kafka,包括所有TOP10旅游公司,7家TOP10银行,8家TOP10保险公司,9家TOP10电信公司等等.LinkedIn.Microsoft和Netflix每天都用Kafka处理万亿级的信息.本文就让我们一起来大白话kafka的架构原理. kafka官网:http://kafka.apache.org/ 01 kafka简介 Kafka最初由Linkedin公

  • kafka安装部署超详细步骤

    目录 概述 Step 1: 下载代码 Step 2: 启动服务 Step 3:创建一个主题 Step 4: 发送消息 Step 5: 消费消息 Step 6: 设置多个broker集群(单机伪集群的配置) Step 7: 测试集群的容错能力 7.1发布消息到集群 7.2消费消息 7.3干掉leader,测试集群容错 7.4再次消费消息,确认消息没有丢失 概述 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当

  • mysql-canal-rabbitmq 安装部署超详细教程

    原文 1.1. 开启 MySQL 的 binlog 日志 1.修改 my.cnf 或 my.ini(windows), 添加配置项: # binlog 日志存放路径 log-bin=D:\env\mysql-5.7.28-winx64\binlog # 日志中记录每一行数据被修改的形式 binlog-format=ROW # 当前机器的服务 ID, 如果为集群时不能重复 server_id=1 2.重启 mysql 服务后, 查看配置变量是否生效: mysql> show variables l

  • Oracle手动建库安装部署超详细教程

    手动创建PROD数据库 步骤1 指定SID Oracle_SID是用于区别数据库实例的环境变量. ORACLE_SID=prod export ORACLE_SID 步骤2 确定Oracle环境的环境变量 在操作系统平台下,Oracle_SID和ORACLE_HOME必须指定,建议指定PATH包含ORACLE_HOME/bin目录.环境变量的实际操作如下: 创建数据目录和审计目录: [oracle@db1 oradata]$ mkdir -p /u01/app/oradata/prod [ora

  • Docker安装mysql超详细步骤记录

    查看需要安装的镜像版本 dockerHub官网地址 1.搜索mysql 2.点击标签 3.点击Tags,查看想要的版本号 在安装好docker的linux中执行命令 拉取mysql最新版本 docker pull mysql 拉取mysql指定版本 docker pull mysql:5.7 拉取结束后,查看本地是否存在 docker images 运行mysql docker run -d -p 3306:3306 --name mysql -v /mysqldata/mysql/log:/v

  • window10下node使用管理神器NVM安装配置超详细步骤

    目录 前言 一.什么是nvm? 二.nvm下载安装配置 1.下载 2.nvm解压安装 3.检查环境变量 4.确认安装成功 5.设置和安装node 5.1 设置淘宝镜像 5.2 安装node指定版本并使用 5.3 指定全局安装路径和缓存路径 总结建议 前言 node版本持续更新,一些node的新特性只有在node的较高版本中才可以使用.但是如果将node版本切换到较高版本,就会导致对现有项目的一些依赖造成环境不兼容.所以,需要一个工具对node版本进行管理,允许开发环境同时存在多个node版本,开

  • 完全卸载nginx以及安装的超详细步骤

    目录 前言 一.卸载NGINX 1.停止Nginx软件 2.查找根下所有名字包含nginx的文件 3.执行命令 rm -rf *删除nignx安装的相关文件 4.其他设置 二.开始安装NGINX a.安装所需插件 1.安装gcc 2.pcre.pcre-devel安装 3.zlib安装 4.安装openssl b.安装nginx 1.下载nginx安装包 2.把压缩包解压到usr/local/java 3.切换到cd /usr/local/java/nginx-1.9.9/下面 4.切换到/us

  • Navicat15安装教程超详细步骤(最靠谱)

    Navicat是一套快速.可靠的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设. 它的设计符合数据库管理员.开发人员及中小企业的需要. Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建.组织.访问并共用信息. Navicat Premium15安装及破解教程详解亲测有效(附破解失败解决方案) Navicat Premium 15 永久破解激活工具及安装教程(亲测可用) 一.下载地址 1.Navicat官方网址 Navicat官方网址 2.百度网盘下载

  • BeyondCompare4下载安装使用超详细步骤

    BeyondCompare是个挺好用的文本比较软件,唯一的不方便是它是收费的,其实这倒也不是缺点,毕竟谁都要恰饭的嘛.只是对我们这种小喽啰来说,真的很难为每个使用的软件.游戏.音乐.视频出钱,除非你是不差钱的富二代,不然终究是有取舍的.像这样的软件就不得被我舍掉了,需要一些灰色手段去长期使用.但是不要为此骄傲,毕竟如果我们是这个软件的开发者,看到别人用盗版还那么嚣张,除了一砖头拍过去也没有其他想法了. 1.下载 官网下载BeyondCompare4 https://www.beyondcompa

  • windows 部署JAVA环境安装iDea的详细步骤

    Java环境部署 下载所需软件和依赖 安装 jdk 路径可选别的盘.但是指向时得注意我自己时装在 F 盘的,在f盘里新建文件夹 Java,Java里再新建两个文件夹 jre1.8.0_152 和 jdk1.8.0_152,安装 jdk时就路径为 F:\Program Files\Java\jdk1.8.0_152 自动弹出安装 jre 安装路径不改 路径可选别的盘.但是指向时得注意,例如我自己的 jdk 安装路径为 F:\Program Files\Java\jre1.8.0_152 安装完成后

  • JDK下载与安装超详细步骤大全

    目录 开发环境-JDK安装 1. 下载地址 2. 安装JDK 3. 配置系统环境 总结 开发环境-JDK安装 无论在我们开始学习Java或者入职第一天安装环境,这个你都是必备滴!下面是下载和安装JDK的教程: 1. 下载地址 这里默认采用比较流行的jdk版本jdk1.8. https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 打开链接,进入该页面: 往下拉,根据你的电脑系统来进行对应的版本进行选择:

随机推荐