01-Kafka初识

Kafka初识

Kafka系列文章是基于:深入理解Kafka:核心设计与实践原理一书,结合自己的部分实践和总结。

一、什么是Kafka

  • 消息系统
Kafka提供传统消息中间件的系统解耦、冗余存储、削峰填谷、异步通信、缓冲、扩展和恢复功能,以及大多数消息中间件不具备的消息顺序保证和回溯消费。
  • 存储系统
Kafka提供持久化机制,并提供多副本机制,将对应主题设置保留策略并开启压缩,可将Kakfa作为存储系统。
  • 流式处理平台
Kafka为流式处理平台提供可靠的数据来源,并且提供了完整的流式处理类库,比如窗口、连接、变换和聚合等。
  • PS:关于Kafka版本信息,可以参考:kafka版本

二、架构

2.1 架构角色

  • Kafka架构包含的角色包括:生产者、消费者、Broker和zookeepr。
角色功能
Producer生产消息到Broker
Broker消息持久化和消息管理等
Consumer从Broker订阅消费消息
Zookeeper管理Kafka集群元数据
  • Topic:主题;Kafka中消息按照主题进行归类,每一个消息都有一个主题,同一主题的消息并不意味着要保存在一个地方,主题仅仅是一个逻辑的概念。
  • Partion:分区;Kafka是高扩展的,一个Topic下的消息数量理论上没有限制(offset有限制,但是是一个天文数字),但一个Topic下的消息可以分为多个分区,每个分区的消息互不一样,他们的并集是整个Topic的消息,每一分区可理解为一个可追加的日志文件。
  • Offset:偏移,或者位移;Kafka中消息是有序的,这个有序是通过偏移来实现的,类似于数组的下标,每条消息的元数据中会保存该消息的Offset,但是需要注意的是Offset是不跨分区的,他只能代表自己在一个分区内的位移标示,换言之Kafka中消息有序是针对分区而言的,对于Topic而言消息不能保证有序。
  • Replica:副本;Kafka是高可用的,分区的消息需要保证不能丢失,由此引入了副本机制,对于一个分区而言可有多个副本,副本间是一主多从,冗余保存消息,主是leader负责读写请求,从是follower负责同步leader的消息,leader故障,follower会重新选举出新的leader对外服务,实现故障转移。
  • AR:Assigned Replicas;分区所有副本称为AR。
  • ISR:AR中与leader副本保持一定程度同步的副本集合为ISR(In-Sync Replicas),ISR是AR的一个子集,这个"一定程度"可以通过参数配置。
  • OSR:AR中不能保持和leader同步的副本称为OSR(Out-of-Sync Replicas),AR=ISR+OSR,正常情况OSR为空,AR=ISR
PS:leader副本会维护ISR和OSR集合,当ISR中某副本落后太多则会被转移到OSR,反之也是一样。默认情况leader故障时只有ISR中的副本有资格被选举,OSR中的副本没有机会。(也可以通过配置改变)
  • HW:High Watermark,高水位,它标示了一个offset,消费者只能拉取该offset之前的消息。比如HW是5,那么消费者只能拉去offset<=4的消息,offset>=5的消息对消费者不可见。
  • LEO:Log End Offset,当前分区的最后一条消息的offset加一,它代表下一条待写入消息的offset。
  • LEO和HW的关系:ISR中所有LEO的最小值是HW。比如ISR的三个副本LEO是7、8和9,那么说明三个副本依次有6、7和8条消息,那么对于消费者而言只有前面6条消息是可见的,7和8的消息是不能被消费的,因为这2条消息还未确认写成功,因此HW就是7,也就是HW=min(LEO in ISR)。使用这个ISR的机制,消息的写入既不是完全同步,也不是异步,同步是消息需要全部写入到可工作的副本才代表写入成功,异步则是只要写入leader就代表写入成功,前者效率低,后置数据有丢失风险,采用ISR机制,在网络存在部分拥塞时,可以避免写入时阻塞过久,有效的权衡了可靠性和性能之间的关系。

2.2 架构图

  • Kafka架构图

[外链图片转存失败(img-0dkCQGoj-1563538131737)(https://note.youdao.com/yws/api/personal/file/290BF970A5004F8AB6370CF59E1E34AC?method=download&shareKey=986f04235455251a3767e4dda7a32d55)]

  • Kafka多副本架构

[外链图片转存失败(img-qjstCG8j-1563538131739)(https://note.youdao.com/yws/api/personal/file/C01A2F7458F844749B5A43EBD4033F14?method=download&shareKey=ecde5557fe12eccb2206ef134872c55e)]

三、核心参数

  • 只需要配置下面三个参数Kafka就可以启动了。(前提是Zookeeper环境是ok的)
参数作用描述
zookeeper.connectzk连接地址;可以配置多个,比如host1:port1,host2:port2,host3:port3。
broker.id唯一标示,在一个集群中该id是唯一的。默认是-1,建议在server.properties文件中配置。如果没有配置会生成一个唯一id。
listenerskafka的监听地址和端口;建议手动配置,其他相关的监听地址配置项都已经废弃
PS:
zookeeper.connect:当一个zk管理多个Kafka集群时可以通过chroot区分,比如host1:port1,host2:port2,host3:port3/chroot1/path1,这样不同的kafka集群数据保存的位置不同
broker.id配置大于0才能启动成功
  • 另外有几个关键配置,建议必要时修改
参数作用描述
log.dirs日志保存路径,默认/tmp/kafka-logs。
message.max.bytes消息大小上限,默认1M左右

四、安装部署

  • 单机部署,基于Kafka的2.0.0版本,安装包是:kafka_2.11-2.0.0

4.1 准备

  • 创建目录
    mkdir -p /home/intellif/kafkadata #存放数据日志

4.2 下载安装包

  • 下载
下载地址:http://kafka.apache.org/downloads
在线下载:sudo wget https://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz
  • 解压
tar -zxvf kafka_2.11-2.0.0.tgz

4.3 修改配置

  • server.properties是Kafka的配置文件,在config路径下
vi ./config/server.properties
  • 核心配置
zookeeper.connect=localhost:2181
broker.id=0
listeners=PLAINTEXT://192.168.13.53:9092
  • PS:单机版修改上面三个参数就可以启动了,但是下面的参数建议修改
log.dirs=/home/intellif/kafkadata ,默认是:/tmp/kafka-logs,重启设备数据就没有了

4.4 启动、检验和关闭

  • 注意下面因为我都在root的权限的文件夹下操作,因此很多命令都带了sudo,如果单独在一个用户权限的路径下,sudo可以不带。

  • 启动

启动:进入bin目录,启动kafka:sudo ./kafka-server-start.sh -daemon ../config/server.properties
验证:查看9092端口  
  • 创建Topic
创建Topic(因为是单点,分区和副本都是1) 
./kafka-topics.sh  --zookeeper localhost:2181  --create   --topic testTopic --partitions 1  --replication-factor 1
  • 查看Topic列表
./kafka-topics.sh  --zookeeper   localhost:2181  --list 
  • 发送消息到Topic
./kafka-console-producer.sh  --broker-list 192.168.13.53:9092 --topic testTopic
  • 从Topic消费消息
./kafka-console-consumer.sh  --bootstrap-server 192.168.13.53:9092  --topic testTopic --from-beginning
  • 示例:
intellif@segment2:/opt/kafka/kafka_2.11-2.0.0/bin$ ./kafka-topics.sh  --zookeeper localhost:2181  --create   --topic testTopic --partitions 1  --replication-factor 1
Created topic "testTopic".
intellif@segment2:/opt/kafka/kafka_2.11-2.0.0/bin$ ./kafka-topics.sh  --zookeeper   localhost:2181  --list 
testTopic
intellif@segment2:/opt/kafka/kafka_2.11-2.0.0/bin$ ./kafka-console-producer.sh  --broker-list 192.168.13.53:9092 --topic testTopic
>aaa
>bbb
>ccc
intellif@segment2:/opt/kafka/kafka_2.11-2.0.0/bin$ ./kafka-console-consumer.sh  --bootstrap-server 192.168.13.53:9092  --topic testTopic --from-beginning
aaa
bbb
ccc
  • 4.3 关闭
停止:sudo ./kafka-server-stop.sh 

4.5 其他

  • bin下面有很多Kafka提供的脚本,提供相关的功能,包括各种客户端脚本和测试脚本等。
  • kafka内置有zk,但是建议单独部署zk
  • 除了命令行中提供的客户端,也可以使用可视化客户端工具kafkatool
  • Kafka目录结构,其中bin和config是非常重要的两个目录,平时也是经常使用的。
目录作用
bin存放各种命令脚本
config存放配置文件
libs依赖的第三方库
logsKafka系统日志,部署的时候没有,启动之后会自动创建该文件夹,如果权限不够会启动失败
site-docs文档
LICENSE和NOTICE许可和注意事项

五、参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值