第二讲:Kafka在windows安装(含分布式)

Hi,大家好,我是一个爱冒泡的程序猿,
天爷啊,这鬼疫情什么时候才能结束,好想出去玩o(╥﹏╥)o
kafka第一讲:kafka要点入门

1、启动zookeeper(在根目录执行此下命令):

zookeeper-server-start.bat ../../config/zookeeper.properties

2、启动kafka(在根目录执行此命令):

kafka-server-start.bat ../../config/server.properties

3、定义好的分区只能加不能减少

D:\kafka_2.12-2.8.0\bin\windows>kafka-topics.bat --alter --zookeeper localhost:2181 --topic topic-02 --partitions 1
WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected
Error while executing topic command : The number of partitions for a topic can only be increased. Topic topic-02 currently has 2 partitions, 1 would not be an increase.
[2022-04-07 13:18:20,883] ERROR org.apache.kafka.common.errors.InvalidPartitionsException: The number of partitions for a topic can only be increased. Topic topic-02 currently has 2 partitions, 1 would not be an increase.
(kafka.admin.TopicCommand$)

D:\kafka_2.12-2.8.0\bin\windows>kafka-topics.bat --alter --zookeeper localhost:2181 --topic topic-02 --partitions 3
WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected
Adding partitions succeeded!

4、replication-factor 副本因子不允许更改,所以在创建topic时就要定义好

5、发送消息和接收消息报错:

(id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
因为命令行中kafka端口号应该是9092
生产者:

kafka-console-producer.bat --bootstrap-server 172.17.2.47:9092 --topic topic-02

消费者:

kafka-console-consumer.bat --bootstrap-server 172.17.2.47:9092 --topic topic-02

6、windows下,执行kafka-console-producer.bat 收到中文消息是乱码

是因为windows cmd控制台字符集不是utf-8,解决方法

7、简单的压力测试-批量生产topic数据

kafka-producer-perf-test.bat --topic topic-01 --num-records 1000 --record-size 1 --throughput 200 --producer-props bootstrap.servers=localhost:9092

8、配置单机伪分布式

单机伪分布式,复制三份server.properites,但需要修改端口、broker.id、log.dirs。

server.properties

# Kafka broker节点唯一标识
borker.id=0
# 端口号(伪分布式不能冲突)
port=9092
# 对客户端提供的服务器地址和端口
advertised.listener=PLAINTEXT://192.168.56.105:9092
# Kafka日志存分路径
log.dirs=/home/hadoop/kafka/broker-0

server1.properties

# Kafka broker节点唯一标识
borker.id=1
# 端口号(伪分布式不能冲突)
port=9093
# 对客户端提供的服务器地址和端口
advertised.listener=PLAINTEXT://192.168.56.105:9093
# Kafka日志存分路径
log.dirs=/home/hadoop/kafka/broker-1

server2.properties

# Kafka broker节点唯一标识
borker.id=2
# 端口号(伪分布式不能冲突)
port=9094
# 对客户端提供的服务器地址和端口
advertised.listener=PLAINTEXT://192.168.56.105:9094
# Kafka日志存分路径
log.dirs=/home/hadoop/kafka/broker-2

9、基本命令使用

创建

# 创建一个拥有1个分区3个副本的topic
$ kafka-topics.sh --create --zookeeper master:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

修改

# 修改topic
$ kafka-topics.sh --alter --zookeeper master:2181 --topic my-replicated-topic --partitions 2

删除

# 删除topic
$ kafka-topics.sh -delete --zookeeper master:2181 -topic my-replicated-topic

查看

# 查看topic信息
$ kafka-topics.sh --describe --zookeeper master:2181 --topic my-replicated-topic

查看主题列表

$ kafka-topics.sh --list --zookeeper master:2181
$ kafka-topics.sh --list --zookeeper master:2181,master:2182,master:2183

生产消息

# 命令方式
$ kafka-console-producer.sh --broker-list master:9092 --topic my-replicated-topic

# 调用工具类方式
$ kafka-run-class.sh kafka.tools.ConsoleProducer --broker-list master:9092,master:9093,master94 --topic my-replicated-topic

消息批量生成

$ kafka-producer-perf-test.sh --topic test --num-records 100 --record-size 1 --throughput 100 --producer-props bootstrap.servers=localhost:9092

消费消息

# 命令方式
$ kafka-console-consumer.sh --bootstrap-server 192.168.56.105:9092 --from-beginning -topic mytopic-02

# 调用工具类方式
$ kafka-run-class.sh kafka.tools.SimpleConsumerShell --broker-list master:9092,master:9093,master:9094 --topic my-replicated-topic

10、在启用多broker时,其中有节点报错,导致不可用

① 报错一:disconnected before the response was read

Error in response for fetch request (type=FetchRequest, replicaId=0, maxWait=500, minBytes=1, maxBytes=10485760, fetchData={topic-jn-2=PartitionData(fetchOffset=0, logStartOffset=0, maxBytes=1048576, currentLeaderEpoch=Optional[0], lastFetchedEpoch=Optional.empty)}, isolationLevel=READ_UNCOMMITTED, toForget=, metadata=(sessionId=INVALID, epoch=INITIAL), rackId=) (kafka.server.ReplicaFetcherThread)
java.io.IOException: Connection to 1 was disconnected before the response was read

解决方案

offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3

② 报错二:分区ISR列表出现频繁Expanding, Shinking,导致broker不可用

Kafka的集群中有节点日志出现大量的ISR列表频繁Expanding, Shinking问题造成当前节点不可用问题,该问题出现的原因为:Kafka的每个topic有若干个分区partition,每个partiton可能有多个备份,这样就单个分区而言,多个备份中有leader和follower两种角色,follower会定时从leader同步数据,每个分区都有一个ISR列表,该列表表征了分区的多个备份是否在同步中,若follower挂掉或者网络抖动,则被移除ISR列表,若恢复正常,则加入到ISR列表。
若出现ISR频繁的Expanding和 Shinking表明可能是单个分区的数据量过大导致部分分区的follower无法及时备份,或者follower无法及时同步足够的消息已满足ISR判定条件,从而被Shinking清除出ISR列表,瞬间又追上复制速度,从而Expanding加入到ISR列表。

解决方法

修改kafka的配置文件,增加单个broker的复制数据的线程数,降低ISR列表判定条件(时长+条数)。

11、kafka常见问题及解决方案

具体内容

12、本地springBoot集成kafka

发送消息时报错:org.apache.kafka.common.errors.TimeoutException

本地hosts需要打开配置:127.0.0.1 localhost

听说有一对小情侣买彩票中了800万,咱不做那个梦(祈祷:保佑我赶紧暴富),毕竟是中奖绝缘体(梦想还是要有的)
pic

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哩哩啦啦’

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值