Kafka使用

1. 什么是Kafka

Kafka是一个分布式的基于发布/订阅模式消息队列(Message Queue),主要应用于大数据实时处理领域,且是一个分布式的数据流式传输平台,由Scala写成。

Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。

2. Kafka特点

作为一个数据流式传输平台,kafka有以下三大特点:

  1. 类似于消息队列和商业的消息系统,kafka提供对流式数据的发布和订阅
  2. kafka提供一种持久的容错的方式存储流式数据
  3. kafka拥有良好的性能,可以及时地处理流式数据

基于以上三种特点,kafka在以下两种应用之间流行:

①需要在多个应用和系统间提供高可靠的实时数据通道

②一些需要实时传输数据及及时计算的应用

此外,kafka还有以下特点:

kafka主要集群方式运行在一个或多个可跨多个数据中心的服务器上。

kafka集群将数据按照类别记录存储,这种类别在kafka中称为主题

每条记录由一个键,一个值和一个时间戳组成

3. 基本概念

  1. broker:一台kafka服务器就是一个broker。一个集群由多个broker组成。
  2. topic:Topic 就是数据主题,kafka建议根据业务系统将不同的数据存放在不同的topic中!Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。一个大的Topic可以分布式存储在多个kafka broker中!Topic可以类比为数据库中的库!
  3. Partition:每个topic可以有多个分区,通过分区的设计,topic可以不断进行扩展!即一个Topic的多个分区分布式存储在多个broker。此外通过分区还可以让一个topic被多个consumer进行消费!以达到并行处理!分区可以类比为数据库中的表!kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序

  4. offset:数据会按照时间顺序被不断第追加到分区的一个结构化的commit log中!每个分区中存储的记录都是有序的,且顺序不可变!这个顺序是通过一个称之为offset的id来唯一标识!因此也可以认为offset是有序且不可变的! 

    在每一个消费者端,会唯一保存的元数据是offset(偏移量),即消费在log中的位置.偏移量由消费者所控制。通常在读取记录后,消费者会以线性的方式增加偏移量,但是实际上,由于这个位置由消费者控制,所以消费者可以采用任何顺序来消费记录。例如,一个消费者可以重置到一个旧的偏移量,从而重新处理过去的数据;也可以跳过最近的记录,从"现在"开始消费。且消费者的增加和减少,对集群或者其他消费者没有多大的影响。比如,你可以使用命令行工具,对一些topic内容执行 tail操作,并不会影响已存在的消费者消费数据。因为offset在每个消费者都是独立的,每个人消费者都有专属于自己的offset

  5. 持久化:Kafka 集群保留所有发布的记录—无论他们是否已被消费—并通过一个可配置的参数——保留期限来控制。举个例子, 如果保留策略设置为2天,一条记录发布后两天内,可以随时被消费,两天过后这条记录会被清除并释放磁盘空间。Kafka的性能和数据大小无关,所以长时间存储数据没有什么问题。

  6. 副本机制:日志(数据)的分区partition (分布)在Kafka集群的服务器上。每个服务器在处理数据和请求时,共享这些分区。每一个分区都会在已配置的服务器上进行备份,确保容错性。每个分区都有一台 server 作为 “leader”,零台或者多台server作为 follwers 。leader server 处理一切对 partition (分区)的读写请求,而follwers只需被动的同步leader上的数据。当leader宕机了,followers 中的一台服务器会自动成为新的 leader。通过这种机制,既可以保证数据有多个副本,也实现了一个高可用的机制!基于安全考虑,每个分区的Leader和follower一般会错在在不同的broker!

  7. Producer: 消息生产者,就是向kafka broker发消息的客户端。生产者负责将记录分配到topic的指定 partition(分区)中

  8. Consumer: 消息消费者,向kafka broker取消息的客户端。每个消费者都要维护自己读取数据的offset

  9. Consumer Group: 

    每个消费者都会使用一个消费组名称来进行标识。同一个组中的不同的消费者实例,可以分布在多个进程或多个机器上! 如果所有的消费者实例在同一消费组中,消息记录会负载平衡到每一个消费者实例(单播)。即每个消费者可以同时读取一个topic的不同分区!

    如果所有的消费者实例在不同的消费组中,每条消息记录会广播到所有的消费者进程(广播)。如果需要实现广播,只要每个consumer有一个独立的组就可以了。要实现单播只要所有的consumer在同一个组。

    一个topic可以被多个consumer group(简称CG)订阅。即topic的消息会被所有的CG消费,但每个partion只会把消息发给同一CG中的某一个consumer。
    总结:多个CG可以同时订阅一个或多个topic, 同一个CG也可以同时消费topic的多个Partition,但同一个CG只能有一个Consumer可以消费同一个topic的同一个Partition中的数据

4. kafka集群安装

集群规划:3台机器,主机名分别为hadoop101,hadoop102,hadoop103,这3台机器均需要安装一个kafka和一个zookeeper

zookeeper的安装可以参考:https://blog.csdn.net/weixin_38312502/article/details/106341173?spm=1001.2014.3001.5501

4.1 去kafka官网下载安装包

4.2 上传到服务器并解压并重命名为kafka

4.3 在kafka安装目录下新增一个datas目录

mkdir /usr/local/workspace/kafka/datas

4.4 修改kafka的配置文件

文件位于$KAFKA/config/server.properties.需修改的地方如下:

# 设置kafka的实例id,集群中每个kafka的实例id均要唯一
broker.id=101

# kafka存放日志的未知
log.dirs=/usr/local/workspace/kafka/datas

# 配置连接Zookeeper集群地址
zookeeper.connect=hadoop101:2181,hadoop102:2182,hadoop103:2182

#如果kafka版本过低,那么解除配置注释,使得删除topic功能可以使用
delete.topic.enable=true

其他2个kafka的实例也需要修改此配置文件

4.5 添加环境变量并刷新

4.6 启动zookeeper集群

由于kafka集群的元数据是存放在zookeeper上的,所以在启动kafka前要先启动zookeeper

#进入zookeeper安装目录下的bn目录,执行以下命令,3台机器均需启动
zkServer.sh start

4.7 启动集群

# -daemon表示后台运行,后面指定一个配置文件,3台机器均需启动kafka
kafka-server-start.sh -daemon /usr/local/workspace/kafka/config/server.properties

4.7 使用jps命令查看是否启动成功

 或者启动zookeeper的客户端,查看 / 节点下是否创建了kafka所需节点

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

巴中第一皇子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值