kafka小知识--单机部署方式

环境信息:
系统:CentOS Linux release 7.9.2009 (Core)

官网下载地址:https://kafka.apache.org/downloads
跳转到以下页面下载即可:
We suggest the following site for your download:
https://dlcdn.apache.org/kafka/3.0.0/kafka_2.12-3.0.0.tgz

tar -zxvf kafka_2.12-3.0.0.tgz

修改kafka的配置文件

kafka的配置文件在的目录和文件名称如下:
下面我们解释一下配置文件内容(这里只讲几个主要的注解字段)

#一个broker在集群中的唯一标示,要求是正数。在改变IP地址,不改变broker.id的话不会影响consumers
broker.id=1
 
#listeners=PLAINTEXT://:9092
 
#advertised.listeners=PLAINTEXT://your.host.name:9092
 
#listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SS
 
# broker 处理消息的最大线程数,一般情况下不需要去修改
num.network.threads=3
 
# broker处理磁盘IO 的线程数 ,数值应该大于你的硬盘数
num.io.threads=8
 
#  socket的发送缓冲区(SO_SNDBUF)
socket.send.buffer.bytes=102400
 
# socket的接收缓冲区 (SO_RCVBUF)
socket.receive.buffer.bytes=102400
 
# socket请求的最大字节数。为了防止内存溢出,message.max.bytes必然要小于
socket.request.max.bytes=104857600
 
#kafka数据的存放地址,多个地址的话用逗号分割 /tmp/kafka-logs-1,/tmp/kafka-logs-2
log.dirs=/opt/kafka/data/log
 
# 每个topic的分区个数,更多的partition会产生更多的segment file
num.partitions=1
 
num.recovery.threads.per.data.dir=1
 
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1 
 
# 当达到下面的消息数量时,会将数据flush到日志文件中。默认10000
#log.flush.interval.messages=10000
 
# 当达到下面的时间(ms)时,执行一次强制的flush操作。interval.ms和interval.messages无论哪个达到,都会flush。默认3000ms
#log.flush.interval.ms=1000
 
# 日志保存时间 (hours|minutes),默认为7天(168小时)。超过这个时间会根据policy处理数据。bytes和minutes无论哪个先达到都会触发。
log.retention.hours=168
 
#log.retention.bytes=1073741824
 
# 控制日志segment文件的大小,超出该大小则追加到一个新的日志segment文件中(-1表示没有限制)
log.segment.bytes=1073741824
 
# 日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.hours或log.retention.bytes)
log.retention.check.interval.ms=300000
 
# Zookeeper quorum设置。如果有多个使用逗号分割 例如 ip:prot,ip:prot,ip:prot
zookeeper.connect=localhost:2181
 
# 连接zk的超时时间
zookeeper.connection.timeout.ms=6000
 
# ZooKeeper集群中leader和follower之间的同步实际
group.initial.rebalance.delay.ms=0
启动kafka服务

命令需要切换到kafka的bin目录下,
[root@localhost bin]#./kafka-server-start.sh -daemon /opt/testjkl/kafka_2.12-3.0.0/config/server.properties

创建单分区 topic 副本,依然需要在bin目录下运行

命令: ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

[root@localhost bin]# ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Exception in thread “main” joptsimple.UnrecognizedOptionException: zookeeper is not a recognized option
at joptsimple.OptionException.unrecognizedOption(OptionException.java:108)
at joptsimple.OptionParser.handleLongOptionToken(OptionParser.java:510)
at joptsimple.OptionParserState 2. h a n d l e A r g u m e n t ( O p t i o n P a r s e r S t a t e . j a v a : 56 ) a t j o p t s i m p l e . O p t i o n P a r s e r . p a r s e ( O p t i o n P a r s e r . j a v a : 396 ) a t k a f k a . a d m i n . T o p i c C o m m a n d 2.handleArgument(OptionParserState.java:56) at joptsimple.OptionParser.parse(OptionParser.java:396) at kafka.admin.TopicCommand 2.handleArgument(OptionParserState.java:56)atjoptsimple.OptionParser.parse(OptionParser.java:396)atkafka.admin.TopicCommandTopicCommandOptions.(TopicCommand.scala:517)
at kafka.admin.TopicCommand$.main(TopicCommand.scala:47)
at kafka.admin.TopicCommand.main(TopicCommand.scala)

解决方案:
在较新版本(2.2 及更高版本)的 Kafka 不再需要 ZooKeeper连接字符串,即–zookeeper localhost:2181。使用 Kafka Broker的 --bootstrap-server localhost:9092来替代- -zookeeper localhost:2181,如下
在这里插入图片描述

 ./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test --partitions 2 --replication-factor 1 

执行10秒后再报错,如下

[root@localhost bin]# ./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test --partitions 2 --replication-factor 1 
Error while executing topic command : Timed out waiting for a node assignment. Call: createTopics
[2021-12-24 15:21:20,019] ERROR org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: createTopics
 (kafka.admin.TopicCommand$)
[root@localhost bin]# ./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test --partitions 1 --replication-factor 1 
Error while executing topic command : Timed out waiting for a node assignment. Call: createTopics
[2021-12-24 15:23:05,048] ERROR org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: createTopics
 (kafka.admin.TopicCommand$)

解决方法;
因为是刚开始学习Kafka,从看着官网一步一步操作的,但是跟官网的环境不一样。
官网环境是:
1:使用了集成的zookeeper,并且之启动了一个zk实例。
2:三个kafka实例在同一台机器上。
3:官网的kafka集群配置,注意配置监听的时候三个kafka实例都没有配置ip地址
本机默认集群配置信息用了跟官网一样的配置,没有配置主机ip地址。就是因为这个地方导致的
vim server.properties,改为hostip

listeners=PLAINTEXT://127.0.0.1:9092

之后去到bin目录重启kafka,再创建topic test即可成功

./kafka-server-stop.sh /opt/testjkl/kafka_2.12-3.0.0/config/server.properties 
./kafka-server-start.sh -daemon /opt/testjkl/kafka_2.12-3.0.0/config/server.properties 

./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test --partitions 1 --replication-factor 1
查看topic分区
[root@localhost bin]# ./kafka-topics.sh --list zookeeper --bootstrap-server localhost:9092
test
[root@localhost bin]# 
创建生产模式

测试我们的kafka服务,我们使用自主创建生产-消费模式,我们使用命令生产消息,并且消费消息。
生产消息命令:./kafka-console-producer.sh --broker-list localhost:9092 --topic test

[root@localhost bin]# ./kafka-console-producer.sh --broker-list localhost:9092 --topic test
>hello!         
>hello wecome kafka!
>hello my name is hakim 
>
创建消费模式

消费者消费消息命令:./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
或者使用命令:./kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
这两个命令下面的适用于低版本的kafka,而不是用于高版本的
结果如下图所示:

[root@localhost bin]# ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
hello!
hello wecome kafka!
hello my name is hakim

下面是kafka的集群部署:

这里我们介绍的单机多节点broker
利用单节点部署多个broker。不同的broker不同的id,监听端口以及日志目录,如:
将conf目录下的配置文件复制两份。我们使用server-1 server-2 server-3 进行集群。
[root@localhost config]# cp server.properties server-1.properties
[root@localhost config]# cp server.properties server-2.properties
[root@localhost config]# cp server.properties server-3.properties
[root@localhost config]# pwd
/opt/testjkl/kafka_2.12-3.0.0/config

修改server-1 server-2 server-3的配置文件,如下;

vim config/server-1.properties
#修改内容
broker.id=1
listeners=PLAINTEXT://your.host.name:9092  #注意此处
log.dirs=/data/kafka-logs-1
 
vim config/server-2.properties
#修改内容
broker.id=2
listeners=PLAINTEXT://your.host.name:9093   #注意此处
log.dirs=/data/kafka-logs-2
 
vim config/server-3.properties
#修改内容
broker.id=3
listeners=PLAINTEXT://your.host.name:9094   #注意此处
log.dirs=/data/kafka-logs-3

配置完成后,去到bin目录启动borker集群

./kafka-server-start.sh -daemon /opt/testjkl/kafka_2.12-3.0.0/config/server-1.properties
./kafka-server-start.sh -daemon /opt/testjkl/kafka_2.12-3.0.0/config/server-2.properties
./kafka-server-start.sh -daemon /opt/testjkl/kafka_2.12-3.0.0/config/server-3.properties

ps axu|grep server-1/2/3

同时这里我们创建topic副本空间时候就要根据我们启动数量的kafka服务而定了。
命令:
[root@localhost bin]# ./kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 1 --topic mytest1
Created topic mytest1.
[root@localhost bin]#

factor:指的使我们副本的数量,这里我们需要三个副本去对应我们的三个broker,让他们自动选举leader。

查看topic使用:
[root@localhost bin]# ./kafka-topics.sh --list --bootstrap-server localhost:9092
__consumer_offsets
mytest1
test
[root@localhost bin]#

查看详细信息:./kafka-topics.sh --describe --bootstrap-server localhost:9092 ,此时的leader:主的broker ,replicas:代表副本对应的broker id 号, Isr:代表活着的broker

[root@localhost bin]# ./kafka-topics.sh --describe --bootstrap-server localhost:9092 
Topic: mytest1  TopicId: yIMzc8GyQZ-sHm38vizdlw PartitionCount: 1       ReplicationFactor: 3    Configs: segment.bytes=1073741824
        Topic: mytest1  Partition: 0    Leader: 3       Replicas: 3,2,1 Isr: 3,2,1

我们开始创建消息生产者
命令:

[root@localhost bin]# ./kafka-console-producer.sh --broker-list localhost:9092,localhost:9093,localhost:9094 --topic mytest1
>hell #fajl
>you are best       
>!!!
>

消费者消费消息和之前一样
命令:./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mytest1 --from-beginning

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值