深入理解Kafka系列(一)--初识Kafka
深入理解Kafka系列(一)--初识Kafka
系列文章目录
前言
本系列是我通读《Kafka权威指南》这本书做的笔录和思考。
正文
Kafka介绍
kafka是一种基于发布与订阅的消息系统,一般叫做“分布式流平台”。kafka的数据会按照一定的顺序持久化保存,并且让使用者按需读取。并且kafka支持分布式的架构,具备数据故障保护和性能收缩的能力。
Kafka的几个相关概念
- 消息(message):也就是Kafka的数据单元
- 批次:代表一组消息,而同组的消息属于一个主题和分区。因为如果要一条一条消息进行网络传递,那么是很耗时间的,因此可以一批一批的数据进行传递,也就是批次。
- 主题(topic):Kafka中的消息通过主题进行分类。主题可以看做数据库当中的表。
- 分区(partition):一个主题可以分为若干个分区,而一个分区就是一个提交日志。
- 生产者(producer):首先,kafka的客户端就是Kafka系统的用户,而用户分为生产者和消费者。那这里的生产者指的是创建消息的用户。
- 消费者(consumer):负责读取消息,也可以叫做订阅者。一个消费者可以订阅一个or多个主题,并按照消息生成的顺序去读取。
- 偏移量(offset):一种元数据,为一个递增的整数值,在创建消息的时候,kafka就会把偏移量添加到消息里。
- 消费者组:一个消费者组可以包含多个消费者。
- broker:一个独立的Kafka服务器被称作为broker。broker负责接收来自生产者的消息。并为消息设置偏移量,并提交消息到磁盘中进行保存,同时为消费者提供服务,对读取分区的请求作出响应。
kafka的消息添加和消费模型。
kafka的总览
注意:
- 消息以追加的方式写入分区,然后以先入先出的顺序进行读取。
- 因为一个主题一般包含多个分区,因此无法保证一个topic内的顺序是有序的。但是可以保证在单个分区内的消息是有序的。
- 生产者将一条消息发布到一个特定的主题上,一般默认情况下会把消息均衡的分布到指定topic下的所有分区上。
- 消费者根据检查消息的偏移量来区分已经读取过的消息。
- 一个消费者组内的消费者,之间是互斥关系,保证每个分区只能被一个消费者使用。
为什么选择Kafka
基于发布订阅的消息系统有很多,但是为什么很多大公司都使用Kafka?
原因:
- Kafka可以支持多个生产者和消费者:不管在客户端使用单个还是多个主题,或者多个消费者从一个单独的消息流上读取数据。并且消费者之间互不影响。(而其他队列系统的消息一旦被一个客户端读取,其他客户端就无法在读取他)
- 基于磁盘的数据存储:Kafka的数据有保留特性。消息会提交到磁盘,并且按照一定的顺序进行保存。并且每个主题都可以单独的设置消息的保留规则。
- 伸缩性:Kafka支持集群、分布式。可以水平扩展节点的数量。
- 高性能:Kafka的并发处理量无疑是最高的(和ActiveMQ,RabbitMQ,RocketMQ进行相比)
安装Kafka
以下是连接,包含了zookeeper和kafka的安装包
链接:点击我
提取码:cvhs
安装zookeeper
- 解压安装包:tar -zxf zookeeper-3.4.6.tar.gz
- 进入安装包,拷贝一份配置文件(默认的使用的是zoo.cfg):cp zoo_sample.cfg zoo.cfg
- 修改配置文件:vi conf/zoo.cfg
# 先提前在安装目录下创建一个文件夹zkData:mkdir zkData,用来保存数据和日志dataDir=/opt/modules/zookeeper-3.4.6/zkData
- 启动zookeeper: bin/zkServer.sh start,如果出现下面的字样这说明启动成功。
安装kafka
- 解压:tar -zxf kafka_2.11-0.11.0.0.tgz
- 进入文件夹,创建目录:mkdir logs
- 修改配置文件:vi config/server.properties
修改下日志存放路径以及zookeeper的地址即可。
zookeeper.connect=192.168.135.237:2181log.dirs=/opt/modules/kafka_2.11-0.11.0.0/logs#添加参数default.replication.factor=1#打开监听,否则消息写入不进去listeners=PLAINTEXT://192.168.135.237:9092
- 启动kafka:
./bin/kafka-server-start.sh config/server.properties
- 创建topic:
./bin/kafka-topics.sh --zookeeper 192.168.135.237:2181 --partitions 1 --replication-factor 1 --create --topic test2
出现该图则代表创建成功。
- 生产者生产消息:
./bin/kafka-console-producer.sh --broker-list 192.168.135.237:9092 --topic test2
- 消费者消费消息:
./bin/kafka-console-consumer.sh --zookeeper 192.168.135.237:2181 --from-beginning --topic test2
Kafka配置文件的几个常规配置详解
broker有关配置:
- broker.id:
作为broker的唯一标识符,不可重复。默认值为0,所以如果要搭建集群的话,这个id一定要改
- zookeeper.connect
用于保存broker元数据的zookeeper地址。如果有zookeeper集群,那么用逗号分隔
格式为:hostname:port/path。
hostname:zookeeper的服务器IP
port:zookeeper的客户端连接端口,一般为2181
path:可选配置,如果不指定,默认使用根路径。
- log.dirs
kafka的所有消息是保存在磁盘上的,而存放这些日志片段的目录通过该参数指定。
- num.recovery.thread.per.data.dir
一般有三种情况,kafka会使用可配置的线程池来处理日志片段
1.服务器正常启动,用于打开每个分区的日志片段。
2.服务器崩溃后重启,用于检查和截短每个分区的日志片段
3.服务器正常关闭,用于关闭日志片段
默认情况下,每个日志目录都只使用一个县城。
- auto.create.topics.enable
一般有3个情况,kafka会自动创建主题
1.当一个生产者开始往主题写入消息时。
2.当一个消费者开始从主题读取消息时。
3.当任意一个客户端向主题发送元数据时。
主题的一些默认配置
- num.partitions
为一个整数,代表指定了新创建的主题将包含多少个分区。
- log.retention.ms
kafka通常根据时间来决定数据可以保留多久。
默认使用log.retention.hours参数来配置时间,并且默认时间为168个小时,也就是1周
- log.retention.bytes
通过保留的消息字节数来判断消息是否过期。作用于每一个分区上。
例子:如果一个包含8个分区的主题,并且log.retention.bytes=1GB,那么每个主题最多可以保留8GB的数据。
- log.segment.bytes
以上3个的配置都是作用到日志片段上的,而不是作用到单个消息上的。
首先,当消息到达broker时,他会被追加到分区上的当前日志片段上。而日志片段的大小如果超过了log.segment.bytes指定的上限(默认为1GB),当前日志片段就会被关闭,一个新的日志片段会被打开。
- log.segment.ms
用于控制日志片段关闭时间的参数,指定了多长时间后日志片段会被关闭。
- message.max.bytes
用于限制单个消息的大小,默认是1000000,即1MB。如果生产者发送的消息超过这个大小,那么这个消息不会被broker接收,并且生产者还会受到broker返回的错误信息。
总结
本文大概从这么几个方面进行概述:
1.Kafka的相关概念。
2.Kafka的一个简单使用和安装。
3.Kafka的broker和topic有关的配置和解析。
下一篇文章会根据Kafka的生产者消费者以及API层面去详细的介绍。
作者:Zong_0915
来源链接:https://blog.csdn.net/Zong_0915/article/details/109258714
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。