kafka系列文章

第一章 linux单机安装kafka

第二章 kafka——集群安裝部署(自带zookeeper)

一、kafka简介

kafka官网:http://kafka.apache.org/

kafka下载页面:http://kafka.apache.org/downloads

kafka配置快速入门:http://kafka.apache.org/quickstart

新版本的kafka自带有zookeeper,本篇文章记录使用自带zookeeper搭建kafka集群。

为了实现高可用,高吞吐量,kafka以集群方式部署,分別在3台服务器上安裝部署,因kafka依赖于zookeeper,如果想要使用Kafka,就必须安装ZK,Kafka中的消费偏置信息、kafka集群、topic信息会被存储在ZK中。

这里采用kafka內置的zookeeper,也是以集群方式部署,无需在单独安裝zookeeper。

首先让我们看几个基本的消息系统术语:

•Kafka将消息以topic为单位进行归纳。

•将向Kafka topic发布消息的程序成为producers.

•将预订topics并消费消息的程序成为consumer.

•Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker.

producers通过网络将消息发送到Kafka集群,集群向消费者提供消息,如下图所示:



客户端和服务端通过TCP协议通信。Kafka提供了Java客户端,并且对多种语言都提供了支持。

二、环境准备

kafka版本:kafka_2.13-2.7.0.tgz

三台主机IP:10.2.36.42、10.2.36.149、10.2.36.168

三、安裝配置工作

1、kafka安裝

下载后解压kafka,将其解压到/usr/local目录下,删除压缩包即可:

tar xzvf kafka_2.13-2.7.0.tgz #解压

  进入到kafka的config目录

  自定义目录:

首先新建kafka的日志目录和zookeeper数据目录,因为这两项默认放在tmp目录,而tmp目录中内容会随重启而丢失,所以我们自定义以下目录:

mkdir /usr/local/kafka_2.13-2.7.0/zookeeper        #创建zookeeper数据目录
mkdir /usr/local/kafka_2.13-2.7.0/log #创建日志目录
mkdir /usr/local/kafka_2.13-2.7.0/log/zookeeper #创建zookeeper日志目录
mkdir /usr/local/kafka_2.13-2.7.0/log/kafka #创建kafka日志目录

2、zookeeper配置

  > 修改 zookeeper.properties

进入config目录下,修改关键配置如下,3台服务器的zookeeper.properties配置文件都一样

#修改为自定义的zookeeper数据目录
dataDir=/usr/local/kafka_2.13-2.7.0/zookeeper #修改为自定义的zookeeper日志目录
dataLogDir=/usr/local/kafka_2.13-2.7.0/log/zookeeper # 端口
clientPort=2181 #注释掉
#maxClientCnxns=0 #设置连接参数,添加如下配置
tickTime=2000    #为zk的基本时间单元,毫秒
initLimit=10     #Leader-Follower初始通信时限 tickTime*10
syncLimit=5     #Leader-Follower同步通信时限 tickTime*5 #设置broker Id的服务地址
#2181:对cline端提供服务;3888:选举leader使用;2888:集群内机器通讯使用(Leader监听此端口)
server.0=10.2.36.42:2888:3888
server.1=10.2.36.149:2888:3888
server.2=10.2.36.168:2888:3888

  > zookeeper数据目录添加myid配置

在各台服务器的zookeeper数据目录【/usr/local/kafka_2.13-2.7.0/zookeeper】添加myid文件,写入服务broker.id属性值

如这里的目录是/usr/local/kafka_2.13-2.7.0/zookeeper

注:3台服务器都要添加myid文件,但值的內容不一样:

例如:第一台broker.id为0的服务到该目录【/usr/local/kafka_2.13-2.7.0/zookeeper】下执行以下命令,会生成myid文件內容

[root@mmc config]# echo 0 > myid

3、kafka配置

  进入config目录下,修改server.properties文件

注:3台服务器都要配置,其中【broker.id、advertised.listeners】不一样,其它配置都一样

############################# Server Basics #############################
# broker 的全局唯一编号,不能重复
broker.id=0 ############################# Socket Server Settings #############################
# 配置监听,修改为本机ip
advertised.listeners=PLAINTEXT://10.2.36.42:9092 # 处理网络请求的线程数量,默认
num.network.threads=3 # 用来处理磁盘IO的线程数量,默认
num.io.threads=8 # 发送套接字的缓冲区大小,默认
socket.send.buffer.bytes=102400 # 接收套接字的缓冲区大小,默认
socket.receive.buffer.bytes=102400 # 请求套接字的缓冲区大小,默认
socket.request.max.bytes=104857600 ############################# Zookeeper #############################
# 配置三台服务zookeeper连接地址
zookeeper.connect=10.2.36.42:2181,10.2.36.149:2181,10.2.36.168:2181 ############################# Log Basics #############################
# kafka 运行日志存放路径
log.dirs=/usr/local/kafka_2.13-2.7.0/log/kafka # topic 在当前broker上的分片个数,与broker保持一致
num.partitions=3 # 用来恢复和清理data下数据的线程数量,默认
num.recovery.threads.per.data.dir=1 ############################# Log Retention Policy #############################
# segment文件保留的最长时间,超时将被删除,默认
log.retention.hours=168 # 滚动生成新的segment文件的最大时间,默认
log.roll.hours=168

四、kafka启动

1.启动前需开启三台服务器的端口9092,2888,3888

防火墙配置

#开放端口
firewall-cmd --add-port=9092/tcp --permanent #重新加载防火墙配置
firewall-cmd --reload

2.分别启动三台机器的zookeeper,三台机器的zookeeper都启动成功后,再分别启动三台机器的kafka。

3.kafka启动时先启动zookeeper,再启动kafka;关闭时相反,先关闭kafka,再关闭zookeeper

进入kafka根目录

cd /usr/local/kafka_2.13-2.7.0/

启动zookeeper

输入命令:

[root@localhostkafka_2.13-2.7.0]# nohup bin/zookeeper-server-start.sh config/zookeeper.properties >log/zookeeper/zookeeper.log 2>1 &

查看log/zookeeper/zookeeper.log 文件,第1、2台服务器启动的时候,会报错Connection refused,因為另外2、3台服务器没启动,先不用管它。

查看log/zookeeper/zookeeper.log 文件,等3台服务器启动完成后,就不在报错了。

启动kafka

[root@localhostkafka_2.13-2.7.0]# nohup bin/kafka-server-start.sh config/server.properties >log/kafka/kafka.log 2>1 &

  查看log/kafka/kafka.log 文件,启动过程中沒有报错,说明启动成功。

五、kafka测试验证

进入kafka根目录

[root@localhost kafka_2.13-2.7.0]# cd /usr/local/kafka_2.13-2.7.0/

在某台服务器建topic,名称为test

[root@localhost kafka_2.13-2.7.0]# bin/kafka-topics.sh -create --zookeeper 10.2.36.42:2181,10.2.36.149:2181,10.2.36.168:2181 -replication-factor 3 --partitions 3 --topic test

查看topic,确认topic创建成功

[root@localhost kafka_2.11-1.0.0]# bin/kafka-topics.sh --list --zookeeper 10.2.36.42:2181,10.2.36.149:2181,10.2.36.168:2181

查看topic,详细信息

[root@localhost kafka_2.11-1.0.0]# bin/kafka-topics.sh --describe --zookeeper 10.2.36.42:2181,10.2.36.149:2181,10.2.36.168:2181 --topic test

在某台服务器上创建生产者

[root@localhost kafka_2.11-1.0.0]# bin/kafka-console-producer.sh --broker-list 172.16.10.91:9092,172.16.10.92:9092,172.16.10.93:9092 --topic test

在另外两台服务器创建消费者

[root@localhost kafka_2.11-1.0.0]# bin/kafka-console-consumer.sh --bootstrap-server  172.16.10.91:9092 --topic test --from-beginning

修改topic信息

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

删除topic

注意,只是删除Topic在zk的元数据,日志数据仍需手动删除

[root@localhost kafka_2.11-1.0.0]# bin/kafka-topics.sh -delete --zookeeper 10.2.36.42:2181,10.2.36.149:2181,10.2.36.168:2181 --topic test

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的删除

查看kafka未消费的消息

[root@localhost kafka_2.11-1.0.0]# bin/kafka-console-consumer.sh --bootstrap-server 10.2.36.42:9092,10.2.36.149:9092,10.2.36.168:9092 --topic logstash-busi-2 --from-beginning

查看kafka消费進度

命令:bin/kafka-consumer-groups.sh --bootstrap-server <Kafka broker 连接信息> --describe --group <group 名称>

bin/kafka-consumer-groups.sh --bootstrap-server 10.2.36.42:9092,10.2.36.149:9092,10.2.36.168:9092 --describe --group terminalMonitor

六、kafka测试集群的容错能力

Kafka是支持容错的,下面我们来对Kafka的容错性进行测试,测试步骤如下

(1).查看topic的详细信息,观察那个blocker的角色是leader,那些blocker的角色是follower

[hadoop@Master ~]$ 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: 2 Replicas: 2,3,1 Isr: 2,3,1

(2).手工kill掉任意一个状态是follower的borker,测试生成和消费信息是否正确

步骤1中可以看到 2 为leader,1 和 3为 follower,将follower为1的进程kill掉

启动生产和消费者测试信息是否正确

结论:kill掉任意一个状态是follower的broker,生成和消费信息正确,不受任何影响

(3).手工kill掉状态是leader的borker,测试生产和消费的信息是否正确

borker2的角色为leader,将它kill掉,borker 3变成了leader

启动生产和消费者测试信息是否正确

结论:kill掉状态是leader的borker,生产和消费的信息正确

(完)

---------------------------------欢迎留言--------------------------------------------

---------------------如果对你有帮助,请点个赞---------------------------------

文档信息

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

发表日期: 2021年2月5日

kafka——集群安裝部署(自带zookeeper)的更多相关文章

  1. Kafka集群安裝部署(自带Zookeeper)

    kafka简介 kafka官网:http://kafka.apache.org/ kafka下载页面:http://kafka.apache.org/downloads kafka配置快速入门:htt ...

  2. centos7下kafka集群安装部署

    应用摘要: Apache kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的 分布式发布订阅消息系统,是消息中间件的一种,用于构建实时 ...

  3. Kafka集群安装部署、Kafka生产者、Kafka消费者

    Storm上游数据源之Kakfa 目标: 理解Storm消费的数据来源.理解JMS规范.理解Kafka核心组件.掌握Kakfa生产者API.掌握Kafka消费者API.对流式计算的生态环境有深入的了解 ...

  4. kafka集群安全化之启用kerberos与acl

    一.背景 在我们部署完kafka之后,虽然我们已经可以“肆意”的用kafka了,但是在一个大公司的实际生产环境中,kafka集群往往十分庞大,每个使用者都应该只关心自己所负责的Topic,并且对其他人 ...

  5. kafka集群安装部署

    kafka集群安装 使用的版本 系统:centos6.5 centos6.7 jdk:1.7.0_79 zookeeper:3.4.9 kafka:2.10-0.10.1.0 一.环境准备[只列,不具 ...

  6. Kafka集群模式部署

    环境:kafka 0.8.1.1 基本概念 Kafka维护按类区分的消息,称为主题(topic) 生产者(producer)向kafka的主题发布消息 消费者(consumer)向主题注册,并且接收发 ...

  7. kafka 集群的部署安装

    这里我们罗列一下我们的环境 10.19.18.88 zk1 10.19.16.84 zk2 10.19.11.44 zk3 这里公司需要接入kafka用于zipkin来定位调用链 kafka 的地址是 ...

  8. bigdata_ Kafka集群模式部署

    环境:kafka 0.8.1.1 基本概念 Kafka维护按类区分的消息,称为主题(topic) 生产者(producer)向kafka的主题发布消息 消费者(consumer)向主题注册,并且接收发 ...

  9. Kafka 集群安装部署

    2.1 安装部署 2.1.1 集群规划 192.168.1.102 192.168.1.103 192.168.1.104 zookeeper zookeeper zookeeper kafka ka ...

随机推荐

  1. 【Linux】使用 iperf 测试 Linux 服务器带宽

    iperf 简介 iperf 是一个用于测试网络带宽的命令行工具,可以测试服务器的网络吞吐量.目前发现两个很实用的功能: 测试服务器网络吞吐量:如果我们需要知道某台服务器的「最大」网络带宽,那么最好在 ...

  2. 【Python】简单的脚本,轻松批量修改文件名称

    使用python脚本,批量修改文件夹名称 先创建一些没用的案例文件 import os #创建新文件夹 dir = os.makedirs('D:\\SomeThing\\testfile') #将文 ...

  3. leetcode 1240. 铺瓷砖(回溯,DFS)

    题目链接 https://leetcode-cn.com/problems/tiling-a-rectangle-with-the-fewest-squares/ 题意: 用尽可能少的正方形瓷砖来铺地 ...

  4. Linux下nginx的安装以及环境配置

    参考链接 https://blog.csdn.net/qq_42815754/article/details/82980326 环境: centos7 .nginx-1.9.14 1.下载 并解压  ...

  5. 2.4V升3.3V,2.4V升3V,1A大电流升压芯片

    两节镍氢电池串联就是1.2V+1.2V=2.4V的供电电压了,2.4V升3V, 2.4V升3.3V的话,就能稳压稳定给模块供电了,镍氢电池是会随着使用的电池电量减少的话,电池的电压也是跟着变化的,导致 ...

  6. windows_myql 安装与卸载详细讲解,

    windows_myql 安装 注意: 安装前把 所有杀毒软件,安全卫士等关闭. 打开下载的mysql安装文件双击解压缩,运行"mysql-5.5.40-win64.msi". 注 ...

  7. 翻译 - ASP.NET Core 基本知识 - 通用主机 (Generic Host)

    翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-5.0 ...

  8. 精通MySQL之架构篇

    老刘是即将找工作的研究生,自学大数据开发,一路走来,感慨颇深,网上大数据的资料良莠不齐,于是想写一份详细的大数据开发指南.这份指南把大数据的[基础知识][框架分析][源码理解]都用自己的话描述出来,让 ...

  9. jvm源码解析java对象头

    认真学习过java的同学应该都知道,java对象由三个部分组成:对象头,实例数据,对齐填充,这三大部分扛起了java的大旗对象,实例数据其实就是我们对象中的数据,对齐填充是由于为了规则分配内存空间,j ...

  10. malloc函数 链表 运行时才知道内存 动态内存

    https://baike.baidu.com/item/malloc函数 malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void ...