专栏首页品茗ITWeb基础配置篇(十四): Kafka单机、集群的安装配置及使用

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

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了。

**如果大家正在寻找一个java的学习环境,或者在开发中遇到困难,可以<a

href="https://jq.qq.com/?_wv=1027&k=52sgH1J"

target="_blank">

加入我们的java学习圈,点击即可加入

</a>

,共同学习,节约学习时间,减少很多在学习中遇到的难题。**

二、准备工作

2.1 启动zookeeper

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

2.2 Kafka下载

在这里插入图片描述

  • 解压后如上图所示,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 helloTetsLinux上使用: ./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 3Linux上使用: ./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 TestTestLinux上使用: ./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 helloWorldLinux上使用: ./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-beginningLinux上使用: ./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的数据。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。 Kafka适合离线...

    品茗IT
  • SpringCloud微服务实战系列(十七)Ouath2在真实场景中的应用之资源服务器

    在《SpringBoot入门建站全系列(三十五)整合Oauth2做单机版认证授权》和《Spring整合Oauth2单机版认证授权详情》中

    品茗IT
  • Spring和SpringDataJpa整合的乐观锁与悲观锁详情

    上一篇《Spring和SpringDataJpa整合详解》介绍了Spring如何结合Spring-data-jpa进行数据库访问操作。这一篇介绍下springm...

    品茗IT
  • libcurl上传文件

    libcurl参数很多,一不小心就容易遇到问题。曾经就遇到过一个很蛋疼的问题:libcurl断点下载>>

    meteoric
  • 微服务架构设计 第五步: 微服务的 User Stories 的拆分与澄清

    2016.9.11, 深圳, Ken Fang 特性负责人与架构师, 开发骨干人员, 测试经理, 资深测试人员, 经由协作, 完成了: 1.  微服务边界上下文...

    Ken Fang 方俊贤
  • 0728-6.3.0-如何在Redhat7.4安装CDH6.3

    Cloudera在2019年7月31日,对外宣布正式发布Cloudera Enterprise 6.3,相关介绍可以参考Fayson之前的文章《0682-Clo...

    Fayson
  • 为Hibiscus写文之定时器篇——HashedWheelTimer

    去年一年在简书大约写了25篇,在公司内网写了5篇博客。今年定个小目标吧,在简书产出高质量的博客50篇,加油!

    LNAmp
  • composer私有仓库搭建之系列一:创建自己的私有仓库

    使用 Composer 自带的建项目功能,这个相当于git clone+composer install+ 运行 post-install 脚本。

    joshua317
  • WARNING: Remote certificate is not valid for hostname

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    周小董
  • 下一站,ThoughtWorks

    我是在互联网金融大潮最火热的2014年从MA来到了一个互金公司。选择这个公司是一次很偶然的机缘。一个是因为自己想从一直从事的企业级服务到互联网这个海洋里试试水,...

    rocket

扫码关注云+社区

领取腾讯云代金券