Web基础配置篇(十四): Kafka单机、集群的安装配置及使用

一、概述

Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。 Kafka适合离线和在线消息消费。 Kafka消息保留在磁盘上,并在群集内复制以防止数据丢失。 Kafka构建在ZooKeeper同步服务之上。 它与Apache Storm和Spark非常好地集成,用于实时流式数据分析。

所以说,Kafka还是一个MQ,这时候,你肯定会想到ActiveMQ、RabbitMQ、RocketMQ等,在《Web基础配置篇(十): ActiveMQ与RabbitMQ的安装配置及使用》 一篇中,已经大概讲述了他们之间的区别,这里还是要简单说明一下:

  • ActiveMQ是java写的消息队列,ActiveMq几个月才发一次版本,社区已经不活跃了;
  • RabbitMQ是基于erlang开发,国人很少学erlang的,但社区还是蛮活跃的,而且性能极其好,延时很低;
  • RocketMQ是java写的,阿里的,网上都说怕它哪天gg了,中小型公司用起来就麻烦了,但是性能蛮好的;
  • Kafka是基于scala的,主要是面向大数据的,最大的优点,就是吞吐量高。

所以,网上一般的推荐就是,中小型公司可以选择RabbitMQ,因为怕阿里不维护RocketMQ了,就没有能力去维护RocketMQ;大型软件公司可以选择rocketMq,因为有钱,所以有人维护。至于kafka,根据业务场景选择,大数据领域中以及日志采集,肯定是首选kafka了。

首发地址:

  品茗IT: https://www.pomit.cn/p/2211141614021121

如果大家正在寻找一个java的学习环境,或者在开发中遇到困难,可以加入我们的java学习圈,点击即可加入,共同学习,节约学习时间,减少很多在学习中遇到的难题。

二、准备工作

2.1 启动zookeeper

Kafka是依赖于zookeeper的,所以要先安装zookeeper并启动,可以参考《Web基础配置篇(十一): Zookeeper的安装配置及使用》这一篇来安装启动zookeeper。

2.2 Kafka下载

  • Kafka可以在Kafka官网 查看下载地址,windows和linux上用同一个安装包;
  • 比如我下载的是kafka_2.12-2.3.0.tgz,地址:http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.3.0/kafka_2.12-2.3.0.tgz;
  • 解压;windows上用winrar解压,linux上用tar命令解压(tar -zxvf kafka_2.12-2.3.0.tgz)。

  • 解压后如上图所示,windows的启动命令在windows文件夹下;
  • 配置文件在与bin目录平级的conf目录下;
  • 配置文件中的日志地址其实是数据文件地址,kafka的日志默认在安装目录的logs文件夹下。

2.3 Kafka启动配置说明

配置文件在conf目录下,主要配置是server.properties、producer.properties和consumer.properties;而kafka启动的配置文件是server.properties。

这里只说server.properties几个关键配置:

##每一个broker在集群中的唯一标示,要求是正数。在改变IP地址,不改变broker.id的话不会影响consumers
broker.id=100##kafka监听地址,advertised.listeners默认也是用这个地址,如果不配置,检测的是计算机的hostname,比如我的windows是PLAINTEXT://DESKTOP-OL03P5L:9092,所以建议改掉。
listeners=PLAINTEXT://10.247.62.91:9092##暴漏出去的地址,注册到zookeeper的地址,默认和listeners一样。比如我在docker中绑定地址是172网段的,暴漏出去的就要写192网段的地址了。
advertised.listeners=PLAINTEXT://10.247.62.91:9092## broker 处理消息的最大线程数,一般情况下不需要去修改
num.network.threads=3## broker处理磁盘IO 的线程数 ,数值应该大于你的硬盘数
num.io.threads=8##kafka数据的存放地址(不是日志地址,kafka的日志默认在安装目录的logs文件夹下),多个地址的话用逗号分割 /tmp/kafka-logs-1,/tmp/kafka-logs-2
log.dirs=E:/DevSoft/kafka/kafka_2.12-2.3.0/log## 每个topic的分区个数,若是在topic创建时候没有指定的话 会被topic创建时的指定参数覆盖
num.partitions=1## 数据存储的最大时间
log.retention.hours=168##zookeeper集群的地址,可以是多个,多个之间用逗号分割 hostname1:port1,hostname2:port2,hostname3:port3
zookeeper.connect=localhost:2181

三、Kafka单机版

3.1 Windows启动Kafka

检查配置

修改server.properties文件,来满足自己的需求,比如log.dirs、zookeeper.connect、listeners等配置,:

启动

打开powershell或者cmd,首先进入到kafka的安装目录下,输入命令.\bin\windows\kafka-server-start.bat config/server.properties

然后它就运行起来了。打开zk的界面,看下,已经有kafka相关信息:

点开brokers/ids,可以看到:

3.2 Linux启动Zookeeper

检查配置

修改server.properties文件,来满足自己的需求,比如log.dirs、zookeeper.connect、listeners等配置,:

如果注册到同一个zookeeper,注意broker.id不要重复。

启动

进入到kafka的安装目录下,输入命令bin/kafka-server-start.sh config/server.properties

然后它就运行起来了。打开zk的界面,看下,已经有新注册的kafka相关信息:

但是它的endpoints地址竟然是一串字符串,这是因为我用的docker,读hostname只能读到这个,这个是无效的,还是换成ip靠谱,修改server.properties文件的listeners配置和advertised.listeners配置,将它改为ip地址,注意,listeners配置是监听地址,必须是本机的网络接口ip;advertised.listeners配置是暴漏地址,可以写网关地址

四、Kafka集群

集群和单机的配置是一样的,只要注册到zookeeper的节点可达,可以持续添加节点。但注意的是broker.id不要重复。

我这里分别在windows和linux上安装了一个kafka:

  • windows是本机,ip是10.247.62.91,broker.id设置为100;
  • linux是本机docker环境下的一个节点,内部地址172.17.0.2作为监听地址,192.168.99.100是docker网关,做为暴漏地址注册到zookeeper,broker.id设置为101;
  • zookeeper都用的是windows的单机zookeeper。

可以正常同步数据。

五、测试Kafka

集群和单机的命令没区别,所以这里直接使用两个机器做测试。

5.1 主题

5.1.1 新建topics

在kafka安装目录下执行下面命令。

windows上使用下面命令:
.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 2 -partitions 1 --topic helloTets

Linux上使用:
./bin/kafka-topics.sh --create --zookeeper 10.247.62.91:2181 --replication-factor 2 -partitions 1 --topic helloWorld

这时候就建了两个topics:

zookeeper上显示如下:

点开上图中的topics,可以查看详情:

windows的kafka配置的数据文件夹下已经有两个topics(linux上创建的已经同步过来):

5.1.2 更新topics

新建一个topics(这里是TestTest)之后,在kafka安装目录下执行下面命令。

windows上使用下面命令:
.\bin\windows\kafka-topics.bat --zookeeper 10.247.62.91:2181 --alter --topic TestTest --partitions 3

Linux上使用:
./bin/kafka-topics.sh --zookeeper 10.247.62.91:2181 --alter --topic TestTest --partitions 4

注意,修改topics的分区数,只能增加,减少会报错:Error while executing topic command : The number of partitions for a topic can only be increased。

5.1.3 删除topics

在kafka安装目录下执行下面命令。

windows上使用下面命令:
.\bin\windows\kafka-topics.bat --zookeeper 10.247.62.91:2181 --delete --topic TestTest

Linux上使用:
./bin/kafka-topics.sh --zookeeper 10.247.62.91:2181 --delete --topic TestTest

注意,如果delete.topic.enable没有设置为true,这里的删除只是标记删除,并不真删;删除之后再次删除会提示已经删除。

5.2 生产者

5.2.1 配置

修改producer.properties文件中的bootstrap.servers配置(经测试这个配置改不改不影响),其他配置默认即可。

## brokers节点列表
bootstrap.servers=10.247.62.91:9092,192.168.99.100:9092#压缩类型,有none, gzip, snappy, lz4, zstd。
compression.type=none

5.2.2 生产者发送消息

在kafka安装目录下执行下面命令(注意,–broker-list 指定的ip必须是监听地址配置的ip,否则连接不能,尽管localhost是可达的,它也是无效的):

windows上使用下面命令:
.\bin\windows\kafka-console-producer.bat --broker-list 10.247.62.91:9092 --topic helloWorld

Linux上使用:
./bin/kafka-console-producer.sh --broker-list 192.168.99.100:9092 --topic helloTets

输入命令后,光标就在等你输入了,你可以任意输入字符串即可。

在任何一个节点写入数据,其他节点很快就会同步过来,打开相应topics目录下的log文件,比如我的是00000000000000000000.log,可以看到刚才输入的数据(有乱码存在,正常的,不乱码才不正常,总要整个看不懂的分割符吧)

5.3 消费者

修改consumer.properties文件中的bootstrap.servers配置(经测试这个配置改不改不影响使用,因为命令行需要传入)。

## brokers节点列表
bootstrap.servers=10.247.62.91:9092,192.168.99.100:9092

在kafka安装目录下执行下面命令(注意替换topics):

windows上使用下面命令:
.\bin\windows\kafka-console-consumer.bat --bootstrap-server 10.247.62.91:9092,192.168.99.100:9092 --topic helloTets --from-beginning

Linux上使用:
./bin/kafka-console-consumer.sh --bootstrap-server 10.247.62.91:9092,192.168.99.100:9092 --topic helloTets —from-beginning

下图是我测试的过程:

如图所示:

  • 用windows和linux相互间做数据传递,会发现,windows/Linux发送的消息,windows和linux都能接收到;
  • windows发送的中文,windows自己都不认识,linux也不认识;
  • linux发送的中文,linux认识,windows不认识;
  • 用notepad++调整windows保存的日志文件的编码为utf-8,就能看到正常的中文了.

所以,大概能做这样的结论:kafka存储使用的是UTF-8编码。windows默认一般是gbk,所以无法正常显示windows/linux的数据。

品茗IT-博客专题:https://www.pomit.cn/lecture.html汇总了Spring专题、Springboot专题、SpringCloud专题、web基础配置专题。

快速构建项目

Spring项目快速开发工具:

一键快速构建Spring项目工具

一键快速构建SpringBoot项目工具

一键快速构建SpringCloud项目工具

一站式Springboot项目生成

Mysql一键生成Mybatis注解Mapper

Spring组件化构建

SpringBoot组件化构建

SpringCloud服务化构建

喜欢这篇文章么,喜欢就加入我们一起讨论Java Web吧!

Web基础配置篇(十四): Kafka单机、集群的安装配置及使用相关推荐

  1. [Hadoop集群模式安装与配置全过程]红帽子RatHat6下hadoop集群模式安装(3个节点,master,slave1,slave2)

    红帽子RatHat6下hadoop集群模式安装(3个节点,master,slave1,slave2) 一.学习目标: 使用红帽子RatHat6在虚拟机上搭建hadoop集群,包含3个节点,体验集群分布 ...

  2. Dapr + .NET 实战(十四)虚拟机集群部署 mDNS + Consul

    前面我们说了在单机模式下和K8S集群下的Dapr实战,这次我们来看看如何在不使用K8S的情况下,在一个传统的虚拟机集群里来部署Dapr. 1.环境准备 我们准备两台centos7虚拟机 Dapr1:1 ...

  3. 学习笔记Spark(二)—— Spark集群的安装配置

    一.我的软件环境 二.Spark集群拓扑 2.1.集群规模 192.168.128.10 master 1.5G ~2G内存.20G硬盘.NAT.1~2核 : 192.168.128.11 node1 ...

  4. 高可用集群heartbeat安装配置(一)

    一.HA高可 FailOver:故障转移 包含HA Resource IP, service,STONITH FailBack故障转移原点 Faiover domain:故障转移域 资源粘性资源更倾向 ...

  5. Hadoop集群_Hadoop安装配置

    1.集群部署介绍 1.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesy ...

  6. Java中执行存储过程和函数(web基础学习笔记十四)

    一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...

  7. 学习笔记Hadoop(四)—— Hadoop集群的安装与部署(1)—— 虚拟机安装、java安装

    一.虚拟机安装 1.1.了解一下概念 操作系统 操作系统(operation system,简称OS)是管理计算机硬件与软件资源的计算机程序.操作系统需要处理如管理与配置内存.决定系统资源供需的优先次 ...

  8. Linux下部署Kafka分布式集群,安装与测试

    注意:部署Kafka之前先部署环境JAVA.Zookeeper 准备三台CentOS_6.5_x64服务器,分别是:IP: 192.168.0.249 dbTest249 Kafka IP: 192. ...

  9. Linux中级实战专题篇:rabbitmq(消息中间件p2p模式和pub模式,消息队列rabbitmq详解,单机安装,集群部署以及配置实战)

    一.消息中间件相关概念 1.简介 消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台相关 的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息 队列模型,可以在分布 ...

最新文章

  1. php7怎么开pdo,linux php7.2开启pdo等扩展
  2. 新的一年,想发有关对话系统的paper?快关注时下最大热点:智能化与个性化...
  3. python统计字符出现的次数最多的字符_Python统计字符串中出现次数最多的人名
  4. 后端用python还是php_【后端开发】2019学python还是php
  5. 云原生是企业数字创新的最短路径
  6. 浅尝boost之timer
  7. runtime官方文档
  8. python 多个列表合并_Python实现合并两个列表的方法分析
  9. 这些.Net的细节(面试秘笈),你都知道了吗?
  10. python map函数_Python map()函数
  11. 微软MIX10开幕 支持在线观看
  12. 中国石油大学-《现代应用文写作》第一阶段在线作业
  13. 2020,咋赚钱?|【常垒·常识】
  14. python seaborn学习笔记
  15. fastadmin 阿里云oss解决访问图片是下载
  16. 运行veins示例步骤
  17. 获取自然月之前或者自然月之后的日期
  18. 音视频入门之如何绘制一张图片
  19. C# 微信支付宝 Winform 开发支付宝微信二维码 付款功能(扫码付,条码付,退款、查询、撤销)
  20. 使用moment.js轻松管理日期和时间

热门文章

  1. PHP学习笔记(一)
  2. SVD应用--电影推荐系统+图像压缩
  3. python使用蒙特卡洛方法计算圆周率的流程图怎么画_在python中用蒙特卡洛算法计算圆周率...
  4. 江苏魔百盒M301H_Hi3798MV300-300H-310芯片通刷-免费卡刷固件包
  5. 21天混入数据科学家队伍(下)
  6. req.on 和req.body的使用
  7. taichi获取鼠标位置
  8. Anaconda clean清理命令大全
  9. vscode中vue项目,QRCode二维码生成
  10. abab的四字成语_ABAB式词语大全_ABAB式四字词语有哪些