Kafka(四)集群之kafka

在章节二(https://www.jianshu.com/p/d9fefdf2db85)中,我们部署了单机的kafka,现在我们部署一套集群模式的kafka。

这里我准备了三台虚拟机:
192.168.184.134
192.168.184.135
192.168.184.136
每台机器部署一个zk和kafka。

上一章节中zk集群已经部署完毕。

一、上传tar包到每台服务器

在章节二中,134这台机器已经有kafka存在了,我们在另外两台机器上安装kafka:

[root@bogon ~]# cd /opt/
[root@bogon opt]# tar -xvf kafka_2.12-2.7.0.tgz 

二、修改配置文件

[root@bogon opt]# cd kafka_2.12-2.7.0
[root@bogon kafka_2.12-2.7.0]# cd config/
[root@bogon config]# vi server.properties 

在上面的文件中有几个关键点,我们一一进行配置,我会对配置中的说明翻译:

############################# Server Basics #############################

# The id of the broker. This must be set to a unique integer for each broker.
#broker的id,必须为每个broker设置唯一的正整形
broker.id=0

以下这两个listeners,advertised_listeners 是对外暴露的服务端口,真正建立连接用的是 listeners。
在内网中我们使用listenners就可以了,在docker等容器或云中使用advertised。

############################# Socket Server Settings #############################
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# socket服务监听这个地址。如果不配置将会从java.net.InetAddress.getCanonicalHostName()获取。该方法获取的是当前主机名。
#   FORMAT:
#     listeners = listener_name://host_name:port
#   EXAMPLE:
#     listeners = PLAINTEXT://your.host.name:9092
#listeners=PLAINTEXT://:9092

# Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured.  Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
# broker将主机名通知给生产者和消费者,如果不设置,它将获取listeners的值。否者获取当前主机名
advertised.listeners=PLAINTEXT://192.168.184.134:9092

下面这个是日志路径的配置

############################# Log Basics #############################

# A comma separated list of directories under which to store log files
# 以逗号分隔的,存在日志文件路径
log.dirs=/opt/kafka_2.12-2.7.0/kafka-logs

下面这个是个重点的东西,topic在磁盘上会分为多个partitions存储,相比单一文件存储,增加了并行性,在后续文章中会详细去讲解:

# The default number of log partitions per topic. More partitions allow greater
# parallelism for consumption, but this will also result in more files across
# the brokers.
# topic的默认日志页数。更多的页将会带来更好的并行性,但是会导致文件的数量跨度更大。
num.partitions=10

日志的保存时间:

# The minimum age of a log file to be eligible for deletion due to age
# 日志文件可删除的最小年龄
log.retention.hours=168

以下是zookeeper的配置:

#zk的链接地址,逗号分隔
zookeeper.connect=192.168.184.134:2181,192.168.184.135:2181,192.168.184.136:2181

# 链接zk的超时间,单位是毫秒
zookeeper.connection.timeout.ms=18000

三、启动

这里我们直接设置后台启动,三个节点都是如此:

nohup ./bin/kafka-server-start.sh config/server.properties >/dev/null &

这里面有个小坑,还记得之前我们搭建的单机环境吗?那时候默认的日志文件夹在/tmp/kafka-logs下面,生成了很多内容,导致我们134这个节点无法启动成功,报错如下:

[2021-02-02 14:38:24,741] ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.common.InconsistentClusterIdException: The Cluster ID UpEhBVQ6TkW5Wd_VQKDD6g doesn't match stored clusterId Some(FTThHFq_RzWNZKsduj880A) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.
        at kafka.server.KafkaServer.startup(KafkaServer.scala:252)
        at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:44)
        at kafka.Kafka$.main(Kafka.scala:82)
        at kafka.Kafka.main(Kafka.scala)
[2021-02-02 14:38:24,744] INFO shutting down (kafka.server.KafkaServer)

解决这个问题只需要把/tmp/kafka-logs文件删除就好了。

看到日志出现这一句表明启动成功了:

[2021-02-02 14:47:45,172] INFO [KafkaServer id=1] started (kafka.server.KafkaServer)

四、验证

下面我们验证下是否搭建成功了,首先使用kafkatool工机具连接看下:

kafkatool
kafkatool
kafkatool

我们在134节点创建一个topic:

[root@bogon kafka_2.12-2.7.0]# bin/kafka-topics.sh --create --zookeeper 192.168.184.134:2181 --replication-factor 1 --partitions 1 --topic test-kafka
Created topic test-kafka.

查看topic列表:

[root@bogon kafka_2.12-2.7.0]# bin/kafka-topics.sh --list --zookeeper 192.168.184.134:2181
test-kafka

在kafkatool中查看:


kafkatool

创建生产者:

[root@bogon kafka_2.12-2.7.0]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test-kafka
>

创建消费者:

[root@bogon kafka_2.12-2.7.0]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-kafka --from-beginning

生成者发送消息:

[root@bogon kafka_2.12-2.7.0]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test-kafka
>hello kafka
>

消费者接收消息:

[root@bogon kafka_2.12-2.7.0]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-kafka --from-beginning
hello kafka

到此为止,kafka的集群搭建已经完成了。在后面的文章我们会去学习如何在springboot中集成kafka。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容