CentOS7 安装kafka集群
1. 环境准备
JDK1.8
ZooKeeper集群(参见本人博文)
Scala2.12(如果需要做scala开发的话,安装方法参见本人博文)
本次安装的kafka和zookeeper集群在同一套物理机器上,
192.168.1.101
192.168.1.102
192.168.1.103
2. 下载kafka
到kafka官网下载kafka,目前最新的版本是kafka_2.12-2.1.0.tgz,前面是scala版本号,后面是kafka版本号。
wget http://mirror.bit.edu.cn/apache/kafka/2.1.0/kafka_2.12-2.1.0.tgz #下载kafka_2.12-2.1.0.tgz
mkdir /usr/local/kafka #kafka安装文件放置目录
tar xzf kafka_2.-2.1..tgz #解压kafka二进制文件
mv kafka_2.-2.1. /usr/local/kafka #移动解压后的kafka到/usr/local/kafka
cd /usr/local/kafka/kafka_2.-2.10/config #定位到kafka_2.-.10/config目录,以便后面进行参数配置
3. 配置kafka
看一下配置文件目录下的文件列表
ls -l /usr/local/kafka/kafka_2.-2.1./config
total
-rw-r--r-- root root Nov : connect-console-sink.properties
-rw-r--r-- root root Nov : connect-console-source.properties
-rw-r--r-- root root Nov : connect-distributed.properties
-rw-r--r-- root root Nov : connect-file-sink.properties
-rw-r--r-- root root Nov : connect-file-source.properties
-rw-r--r-- root root Nov : connect-log4j.properties
-rw-r--r-- root root Nov : connect-standalone.properties
-rw-r--r-- root root Nov : consumer.properties
-rw-r--r-- root root Nov : log4j.properties
-rw-r--r-- root root Nov : producer.properties
-rw-r--r-- root root Nov : server.properties
-rw-r--r-- root root Nov : tools-log4j.properties
-rw-r--r-- root root Nov : trogdor.conf
-rw-r--r-- root root Nov : zookeeper.properties
192.160.1.101:
配置server.properties文件
vim /usr/local/kafka/kafka_2.-2.1./config/server.properties
修改其中的内容为:
#当前机器在集群中的唯一标识,和zookeeper的myid性质一样
broker.id= #当前kafka对外提供服务的端口默认是9092
port= #这个参数默认是关闭的,在0..1有个bug,DNS解析问题,失败率的问题。
host.name=192.168.1.101 #这个是borker进行网络处理的线程数
num.network.threads= #这个是borker进行I/O处理的线程数
num.io.threads= #消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,上面的num.io.threads要大于这个目录的个数这个目录,如果配置多个目录,新创建的topic他把消息持久化的地方是,当前以逗号分割的目录中,那个分区数最少就放那一个
log.dirs=/usr/local/kafka/kafka_2.-2.1./kafkalogs/ #发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能
socket.send.buffer.bytes= #kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.receive.buffer.bytes= #这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小
socket.request.max.bytes= #默认的分区数,一个topic默认1个分区数
num.partitions= #默认消息的最大持久化时间,168小时,7天
log.retention.hours= #消息保存的最大值5M
message.max.byte= #kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
default.replication.factor=
#取消息的最大直接数
replica.fetch.max.bytes= #这个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件
log.segment.bytes= #每隔300000毫秒去检查上面配置的log失效时间(log.retention.hours= ),到目录查看是否有过期的消息如果有,删除
log.retention.check.interval.ms= #是否启用log压缩,一般不用启用,启用的话可以提高性能
log.cleaner.enable=false #设置zookeeper的连接端口
zookeeper.connect=192.168.1.101:,192.168.1.102:,192.168.1.103:
相比默认设置,改动项为:
#broker.id= 每台服务器的broker.id都不能相同 #hostname
host.name=192.168.1.101 #在log.retention.hours= 下面新增下面三项
message.max.byte=
default.replication.factor=
replica.fetch.max.bytes= #设置zookeeper的连接端口
zookeeper.connect=192.168.1.101:,192.168.1.102:,192.168.1.103:
将192.168.1.101上配置好的kafka复制到192.168.1.102和192.168.1.103上
scp -r /usr/local/kafka/ 192.168.1.102:/usr/local #将目录/usr/local/kafka/复制到192.168.1.102远程机器上去
scp -r /usr/local/kafka/ 192.168.1.103:/usr/local #将目录/usr/local/kafka/复制到192.168.1.103远程机器上去
修改102,103上的server.properties,改动配置项为: broker.id,host.name
4. 配置系统环境变量(三台机器都要做)
vim /etc/profile
在文件末尾添加内容:
#kafka
export KAFKA_HOME=/usr/local/kafka/kafka_2.-2.1.
export PATH=$KAFKA_HOME/bin:$PATH
:wq保存退出
source /etc/profile #使环境变量生效
5. 启动并测试kafka集群
注意:这个操作三台机器都要做,另外启动之前,请确保zookeeper集群已经启动!
cd /usr/local/kafka/kafka_2.-2.1. #定位到kafka的根目录
./bin/kafka-server-start.sh -daemon ./config/server.properties #启动kafka服务,-daemon表示在后台运行kafka服务器
#或者直接使用绝对地址启动
$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
5.1 检查kafka是否启动
192.168.1.101
[root@ kafka_2.-2.1.]# jps
NameNode
NodeManager
Kafka
PaloFe
QuorumPeerMain
BrokerBootstrap
Jps
DataNode
192.168.1.102
[root@ kafka_2.-2.1.]# jps
QuorumPeerMain
NodeManager
ResourceManager
Kafka
PaloFe
Jps
BrokerBootstrap
SecondaryNameNode
DataNode
192.168.1.103
[root@ kafka_2.-2.1.]# jps
Jps
RunJar
RunJar
PaloFe
BrokerBootstrap
NodeManager
QuorumPeerMain
ManagerBootStrap
Kafka
DataNode
5.2 创建Topic来验证是否创建成功
#创建Topic
$KAFKA_HOME/bin/kafka-topics.sh --create --zookeeper 192.168.1.101: --replication-factor --partitions --topic lenmom
#解释
--replication-factor #复制两份
--partitions #创建1个分区
--topic #主题为shuaige #在一台服务器(192.168.1.101)上创建一个发布者
#创建一个broker,发布者
$KAFKA_HOME/bin/kafka-console-producer.sh --broker-list 192.168.1.101: --topic lenmom #在一台服务器(192.168.1.102)上创建一个订阅者
#kafka 1.2.2以前版本使用 kafka-console-consumer.sh --zookeeper localhost: --topic lenmom --from-beginning
#kafka 1.2.2及之后版本是使用 kafka-console-consumer.sh --bootstrap-server localhost: --topic lenmom --from-beginning
$KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server localhost: --topic lenmom --from-beginning
192.168.101:
[root@ kafka_2.-2.1.]# $KAFKA_HOME/bin/kafka-topics.sh --create --zookeeper 192.168.1.101: --replication-factor --partitions --topic lenmom
Created topic "lenmom".
[root@ kafka_2.-2.1.]# $KAFKA_HOME/bin/kafka-console-producer.sh --broker-list 192.168.1.101: --topic lenmom
>
>
>
>
>
>
>
>
>
>
192.168.1.102:
[root@ kafka_2.-2.1.]# $KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server localhost: --topic lenmom --from-beginning
5.3 查看topic
$KAFKA_HOME/bin/kafka-topics.sh --list --zookeeper localhost:2181 #显示所有主题
__consumer_offsets
lenmom
5.4 查看topic状态
$KAFKA_HOME/bin/kafka-topics.sh --describe --zookeeper localhost: --topic lenmom
Topic:lenmom PartitionCount: ReplicationFactor: Configs:
Topic: lenmom Partition: Leader: Replicas: , Isr: ,
#分区为为1 复制因子为2 他的 shuaige的分区为0
#Replicas: , 复制的为0,
5.5 删除topic
$KAFKA_HOME/bin/kafka-topics.sh --zookeeper localhost: --delete --topic lenmom
Topic lenmom is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
上面消息的意思是,topic被标记为待删除,至于实际是否删除取决于broker的配置参数delete.topic.enable是否为true,在kafka1.0版本之后,该参数值默认为true.
5.6 Producer吞吐量测试
$KAFKA_HOME/bin/kafka-producer-perf-test.sh --topic lenmom --num-record --record-size --throughput --producer-props bootstrap.servers=192.168.1.101:,192.168.1.102:,192.168.1.103: acks=-
records sent, 3.4 records/sec (0.00 MB/sec), 27.6 ms avg latency, 357.0 max latency.
records sent, 3.0 records/sec (0.00 MB/sec), 5.8 ms avg latency, 7.0 max latency.
records sent, 3.0 records/sec (0.00 MB/sec), 5.3 ms avg latency, 6.0 max latency.
records sent, 3.0 records/sec (0.00 MB/sec), 5.3 ms avg latency, 6.0 max latency.
records sent, 3.0 records/sec (0.00 MB/sec), 5.2 ms avg latency, 9.0 max latency.
records sent, 3.0 records/sec (0.00 MB/sec), 5.3 ms avg latency, 9.0 max latency.
records sent, 3.0 records/sec (0.00 MB/sec), 4.9 ms avg latency, 6.0 max latency.
records sent, 3.0 records/sec (0.00 MB/sec), 4.9 ms avg latency, 5.0 max latency.
records sent, 3.0 records/sec (0.00 MB/sec), 5.0 ms avg latency, 6.0 max latency.
records sent, 3.0 records/sec (0.00 MB/sec), 4.5 ms avg latency, 5.0 max latency.
至此,kafka集群安装完毕!
6. 其他说明
6.1 日志说明
默认kafka的日志是保存在$KAFKA_HOME/logs目录下的,这里说几个需要注意的日志
server.log #kafka的运行日志
state-change.log #kafka他是用zookeeper来保存状态,所以他可能会进行切换,切换的日志就保存在这里 controller.log #kafka选择一个节点作为“controller”,当发现有节点down掉的时候它负责在游泳分区的所有节点中选择新的leader,这使得Kafka可以批量的高效的管理所有分区节点的主从关系。如果controller down掉了,活着的节点中的一个会备切换为新的controller.
6.2 zookeeper
#使用客户端进入zk
./zkCli.sh -server 127.0.0.1:
#查看目录情况 执行“ls /”
[zk: 127.0.0.1:(CONNECTED) ] ls /
#显示结果:[cluster, controller_epoch, controller, brokers, zookeeper, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config]
#上面的显示结果中:只有zookeeper是,zookeeper原生的,其他都是Kafka创建的
#标注一个重要的
[zk: 127.0.0.1:(CONNECTED) ] get /brokers/ids/
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://192.168.1.103:9092"],"jmx_port":-,"host":"192.168.1.103","timestamp":"","port":,"version":}
cZxid = 0x100000063
ctime = Tue Jan :: CST
mZxid = 0x100000063
mtime = Tue Jan :: CST
pZxid = 0x100000063
cversion =
dataVersion =
aclVersion =
ephemeralOwner = 0x20000d319500002
dataLength =
numChildren =
[zk: 127.0.0.1:(CONNECTED) ] #还有一个是查看partion
[zk: 127.0.0.1:(CONNECTED) ] get /brokers/topics/lenmom/partitions/
null
cZxid = 0x10000006b
ctime = Tue Jan :: CST
mZxid = 0x10000006b
mtime = Tue Jan :: CST
pZxid = 0x10000006c
cversion =
dataVersion =
aclVersion =
ephemeralOwner = 0x0
dataLength =
numChildren =
kafka通过zookeeper来进行集群选举,元数据都存放在zookeeper中.
参考文档:
http://kafka.apache.org/documentation.html
CentOS7 安装kafka集群的更多相关文章
- Centos7.5安装kafka集群
Tags: kafka Centos7.5安装kafka集群 Centos7.5安装kafka集群 主机环境 软件环境 主机规划 主机安装前准备 安装jdk1.8 安装zookeeper 安装kafk ...
- Centos7.4 kafka集群安装与kafka-eagle1.3.9的安装
Centos7.4 kafka集群安装与kafka-eagle1.3.9的安装 集群规划: hostname Zookeeper Kafka kafka-eagle kafka01 √ √ √ kaf ...
- centos7下kafka集群安装部署
应用摘要: Apache kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的 分布式发布订阅消息系统,是消息中间件的一种,用于构建实时 ...
- Centos安装Kafka集群
kafka是LinkedIn开发并开源的一个分布式MQ系统,现在是Apache的一个孵化项目.在它的主页描述kafka为一个高吞吐量的分布式(能 将消息分散到不同的节点上)MQ.在这片博文中,作者简单 ...
- RedHat6.5安装kafka集群
版本号: Redhat6.5 JDK1.8 zookeeper-3.4.6 kafka_2.11-0.8.2.1 1.软件环境 1.3台RedHat机器,master.slave1. ...
- centos7搭建kafka集群-第二篇
好了,本篇开始部署kafka集群 Zookeeper集群搭建 注:Kafka集群是把状态保存在Zookeeper中的,首先要搭建Zookeeper集群(也可以用kafka自带的ZK,但不推荐) 1.软 ...
- helm安装kafka集群并测试其高可用性
介绍 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 这种动作( ...
- centos7搭建kafka集群
一.安装jdk 1.下载jdk压缩包并移动到/usr/local目录 mv jdk-8u162-linux-x64.tar.gz /usr/local 2.解压 tar -zxvf jdk-8u162 ...
- 快速安装 kafka 集群
前言 最近因为工作原因,需要安装一个 kafka 集群,目前网络上有很多相关的教程,按着步骤来也能完成安装,只是这些教程都显得略微繁琐.因此,我写了这篇文章帮助大家快速完成 kafka 集群安装. ...
随机推荐
- css3实现自适应的3行,左右行固定宽度,中间自适应,要求先渲染中间部分
https://blog.csdn.net/thqy39/article/details/73512478 https://www.cnblogs.com/ranzige/p/4097453.html ...
- 算法-最通俗易懂的KMP算法详解
有些算法,适合从它产生的动机,如何设计与解决问题这样正向地去介绍.但KMP算法真的不适合这样去学.最好的办法是先搞清楚它所用的数据结构是什么,再搞清楚怎么用,最后为什么的问题就会有恍然大悟的感觉.我试 ...
- day058 聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁
1.聚合(aggregate) 聚合的主要语法: from django.db.models import Avg , Max , Min , Count models.类名 .objects.all ...
- Python文件读写(open(),close(),with open() as f...)
Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件读写,也需要注意编码问题 ...
- 厨娘ui设计文档
厨娘ui设计文档 一.概述 中国的饮食文化从古到今源远流长.在生活日益丰富的今天,人们对饮食的要求不仅仅是温饱,更讲究健康和美味.近年来,饮食甚至成为娱乐的一部分,关于吃的流行用语层出不穷,可见在当今 ...
- <a></a>标签传参出现乱码问题
在段代码在传递参数的时候会出现中文乱码,正常情况下,只要在接收参数的时候写上: request.setCharacterEncoding("UTF-8");就能解决问题. 但是,今 ...
- JavaWeb在线电子相册springmvc
(一) 这学期上了一们叫做J2EE的选修课,本以为很水,没想到这个课这么烦气,最后大实验是一个springmvc的电子相册,做了两个周,终于完事了,姑且把这一篇叫做(一)吧 粗略看了一下啊,两个人的实 ...
- case语法2
case流程控制语句在linux中有其独到的一面,使得在编程过程中能够在脚本编写的过程中具备多个选项功能,使其功能多样化,其具备简单,快速的特点. 一.case流程语句结构图 根据流程图可以知道,在所 ...
- lettuce行为驱动框架实例
练习: 一:e1_MyFirstBDD 使用方法的方式实现阶乘的计算 zero.feature: Feature: Compute factorial In order to play with Le ...
- CentOS6.5上安装MySQL
1.查看操作系统的相关信息 2.查看系统上所有MySQL的rpm包并删除 [root@master ~]# rpm -qa | grep -i mysql [root@masterc ~]# yum ...