kafka_2.12-2.6.0介绍及安装教程

1.Kafka 介绍

中文官网

1.1 kafka 是什么?使用场景?

Kafka 是一个高吞吐的分布式消息队列系统。特点是生产者消费者模式,先进先出(FIFO)保证顺序,自己不丢数据,默认每隔 7 天清理数据。
消息列队常见场景:系统之间解耦合、峰值压力缓冲、异步通信。

1.2 kafka 生产消息、存储消息、消费消息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 kafka 的特点

  • 系统的特点:生产者消费者模型,FIFO
    Partition 内部是 FIFO 的,partition 之间呢不是 FIFO 的,当然我们可以把 topic 设为一个 partition,这样就是严格的 FIFO。
  • 高性能:单节点支持上千个客户端,百 MB/s 吞吐,接近网卡的极限
  • 持久性:消息直接持久化在普通磁盘上且性能好
    直接写到磁盘中去,就是直接 append 到磁盘里去,这样的好处是直接持久化,数据不会丢失,第二个好处是顺序写,然后消费数据也是顺序的读,所以持久化的同时还能保证顺序,比较好,因为磁盘顺序读比较好。
  • 分布式:数据副本冗余、流量负载均衡、可扩展
    分布式,数据副本,也就是同一份数据可以到不同的 broker 上面去,也就是当一份数据,磁盘坏掉的时候,数据不会丢失,比如 3 个副本,就是在 3 个机器磁盘都坏掉的情况下数据才会丢,在大量使用情况下看这样是非常好的,负载均衡,可扩展,在线扩展,不需要停服务。
  • 很灵活:消息长时间持久化+Client 维护消费状态
    消费方式非常灵活,第一原因是消息持久化时间跨度比较长,一天或者一星期等,第二消费状态自己维护消费到哪个地方了可以自定义消费偏移量。

2 kafka使用

2.1 kafka 集群搭建

1) 上传kafka_2.12-2.6.0 包到三个不同节点上,解压。
官网下载地址
2) 配置…/ kafka_2.12-2.6.0/config/server.properties 文件

  • 节点编号:(不同节点按 0,1,2,3 整数来配置)
    在这里插入图片描述
  • 真实数据存储位置,本地没有该目录应创建:
    在这里插入图片描述
  • zookeeper 的节点:
    在这里插入图片描述
    3) 启动 zookeeper 集群。
    4) 三个节点上,启动 kafka:
bin/kafka-server-start.sh config/server.properties

也可以自定义启动脚本:
在kafka根目录下创建startKafka.sh脚本文件:

nohup bin/kafka-server-start.sh config/server.properties > kafka.log 2>&1 &

分发至每个节点即可。

2.2 相关命令:

  1. 创建 topic:
bin/kafka-topics.sh --create --topic topic1 --zookeeper node2:2181,node3:2181,node4:2181 --partitions 3 --replication-factor 3

上述命令已弃用,建议:

[root@node3 kafka_2.12-2.6.0]# bin/kafka-topics.sh --create --topic t202011072104 --bootstrap-server node1:9092,node2:9092,node3:9092

–bootstrap-server node4:9092 只需指定一个broker,bootstrap-servers 会自动发现其他 broker

  • 如果使用了–zookeeper参数,那么consumer的信息将会存放在zk之中

  • 如果使用了–bootstrap-server参数,那么consumer的信息将会存放在kafka之中

  1. 用一台节点控制台来当 kafka 的生产者:
[root@node3 kafka_2.12-2.6.0]# bin/kafka-console-producer.sh --topic topic1 --broker-list node1:9092,node2:9092,node3:9092

或者:

[root@node3 kafka_2.12-2.6.0]# bin/kafka-console-producer.sh --topic topic1 --bootstrap-server node1:9092,node2:9092,node3:9092
  1. 用另一台节点控制台来当 kafka 的消费者:
[root@node2 kafka_2.12-2.6.0]# bin/kafka-console-consumer.sh --topic topic1 --from-beginning --bootstrap-server node1:9092,node2:9092,node3:9092

在生产者中写入数据消费者中显示如图;

在这里插入图片描述
查看 kafka 中 topic 列表:

bin/kafka-topics.sh --list --zookeeper node2:2181,node3:2181,node4:2181

查看 kafka 中 topic 的描述:

bin/kafka-topics.sh --describe --zookeeper node2:2181,node3:2181,node4:2181 --topic topic2020

查看 zookeeper 中 topic 相关信息:

# 启动 zookeeper 客户端:
./zkCli.sh
# 查看 topic 相关信息:
ls /brokers/topics/
# 查看消费者相关信息:
ls /consumers
  1. 删除 kafka 中的数据。
    在 每 台 broker 节 点 中的…/config/server.properties 中配置属性:delete.topic.enable=true,
    重启 kafka 集群即可实现删除 topic 时,自动清除 topic 信息。
bin/kafka-topics.sh --zookeeper node2:2181,node3:2181,node4:2181 --delete --topic t2020

2.3 kafka 的 leader 的均衡机制

当一个 broker 停止或者 crashes 时,所有本来将它作为 leader 的分区将会把 leader 转移到其他 broker 上去,极端情况下,会导致同一个leader 管理多个分区,导致负载不均衡,同时当这个 broker 重启时,如果这个 broker 不再是任何分区的 leader,kafka 的 client 也不会从这个 broker 来读取消息,从而导致资源的浪费。
kafka 中有一个被称为优先副本(preferred replicas)的概念。如果一个分区有 3 个副本,且这 3 个副本的优先级别分别为 0,1,2,根据优先副本的概念,0 会作为 leader 。当 0 节点的 broker 挂掉时,会启动 1这个节点 broker 当做 leader。当 0 节点的 broker 再次启动后,会自动恢复为此 partition 的 leader。不会导致负载不均衡和资源浪费,这就是 leader 的均衡机制。

在 Kafka2.6 版本中,Leader 均衡机制需要手动执行命令触发,首先需要配置如下 json 文件:

{
"partitions":
[
{"topic": "topicName", "partition": 0},
{"topic": "topicName", "partition": 1},
{"topic": "topicName", "partition": 2}
]

手动执行如下命令,进行 Leader 均衡:

bin/kafka-preferred-replica-election.sh --zookeeper
node2:2181,node3:2181,node4:2181 --path-to-json-file topic.json

kill掉一个leader后命令执行前:
在这里插入图片描述
执行后恢复:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值