深入理解Kafka系列(一)--初识Kafka

系列文章目录

Kakfa权威指南系列文章

前言

本系列是我通读《Kafka权威指南》这本书做的笔录和思考。

正文

Kafka介绍

kafka是一种基于发布与订阅的消息系统,一般叫做“分布式流平台”。kafka的数据会按照一定的顺序持久化保存,并且让使用者按需读取。并且kafka支持分布式的架构,具备数据故障保护和性能收缩的能力。

Kafka的几个相关概念

  1. 消息(message):也就是Kafka的数据单元
  2. 批次:代表一组消息,而同组的消息属于一个主题和分区。因为如果要一条一条消息进行网络传递,那么是很耗时间的,因此可以一批一批的数据进行传递,也就是批次。
  3. 主题(topic):Kafka中的消息通过主题进行分类。主题可以看做数据库当中的表。
  4. 分区(partition):一个主题可以分为若干个分区,而一个分区就是一个提交日志。
  5. 生产者(producer):首先,kafka的客户端就是Kafka系统的用户,而用户分为生产者和消费者。那这里的生产者指的是创建消息的用户。
  6. 消费者(consumer):负责读取消息,也可以叫做订阅者。一个消费者可以订阅一个or多个主题,并按照消息生成的顺序去读取。
  7. 偏移量(offset):一种元数据,为一个递增的整数值,在创建消息的时候,kafka就会把偏移量添加到消息里。
  8. 消费者组:一个消费者组可以包含多个消费者。
  9. broker:一个独立的Kafka服务器被称作为broker。broker负责接收来自生产者的消息。并为消息设置偏移量,并提交消息到磁盘中进行保存,同时为消费者提供服务,对读取分区的请求作出响应。

kafka的消息添加和消费模型。

在这里插入图片描述
kafka的总览
在这里插入图片描述

注意:

  1. 消息以追加的方式写入分区,然后以先入先出的顺序进行读取
  2. 因为一个主题一般包含多个分区,因此无法保证一个topic内的顺序是有序的。但是可以保证在单个分区内的消息是有序的
  3. 生产者将一条消息发布到一个特定的主题上,一般默认情况下会把消息均衡的分布到指定topic下的所有分区上。
  4. 消费者根据检查消息的偏移量来区分已经读取过的消息
  5. 一个消费者组内的消费者,之间是互斥关系保证每个分区只能被一个消费者使用

为什么选择Kafka

基于发布订阅的消息系统有很多,但是为什么很多大公司都使用Kafka?
原因:

  1. Kafka可以支持多个生产者和消费者:不管在客户端使用单个还是多个主题,或者多个消费者从一个单独的消息流上读取数据。并且消费者之间互不影响。(而其他队列系统的消息一旦被一个客户端读取,其他客户端就无法在读取他)
  2. 基于磁盘的数据存储:Kafka的数据有保留特性。消息会提交到磁盘,并且按照一定的顺序进行保存。并且每个主题都可以单独的设置消息的保留规则。
  3. 伸缩性:Kafka支持集群、分布式。可以水平扩展节点的数量。
  4. 高性能:Kafka的并发处理量无疑是最高的(和ActiveMQ,RabbitMQ,RocketMQ进行相比)

安装Kafka

以下是连接,包含了zookeeper和kafka的安装包
链接:点击我
提取码:cvhs

安装zookeeper

  1. 解压安装包:tar -zxf zookeeper-3.4.6.tar.gz
  2. 进入安装包,拷贝一份配置文件(默认的使用的是zoo.cfg):cp zoo_sample.cfg zoo.cfg
  3. 修改配置文件:vi conf/zoo.cfg
# 先提前在安装目录下创建一个文件夹zkData:mkdir zkData,用来保存数据和日志
dataDir=/opt/modules/zookeeper-3.4.6/zkData
  1. 启动zookeeper: bin/zkServer.sh start,如果出现下面的字样这说明启动成功。
    在这里插入图片描述

安装kafka

  1. 解压:tar -zxf kafka_2.11-0.11.0.0.tgz
  2. 进入文件夹,创建目录:mkdir logs
  3. 修改配置文件:vi config/server.properties
    修改下日志存放路径以及zookeeper的地址即可。
zookeeper.connect=192.168.135.237:2181
log.dirs=/opt/modules/kafka_2.11-0.11.0.0/logs
#添加参数
default.replication.factor=1
#打开监听,否则消息写入不进去
listeners=PLAINTEXT://192.168.135.237:9092
  1. 启动kafka:
./bin/kafka-server-start.sh config/server.properties
  1. 创建topic:
./bin/kafka-topics.sh --zookeeper 192.168.135.237:2181 --partitions 1 --replication-factor 1 --create --topic test2

出现该图则代表创建成功。
在这里插入图片描述

  1. 生产者生产消息:
./bin/kafka-console-producer.sh --broker-list 192.168.135.237:9092 --topic test2

在这里插入图片描述

  1. 消费者消费消息:
./bin/kafka-console-consumer.sh --zookeeper 192.168.135.237:2181 --from-beginning --topic test2

在这里插入图片描述


Kafka配置文件的几个常规配置详解

broker有关配置:

  1. broker.id:

作为broker的唯一标识符,不可重复。默认值为0,所以如果要搭建集群的话,这个id一定要改

  1. zookeeper.connect

用于保存broker元数据的zookeeper地址。如果有zookeeper集群,那么用逗号分隔
格式为:hostname:port/path。
hostname:zookeeper的服务器IP
port:zookeeper的客户端连接端口,一般为2181
path:可选配置,如果不指定,默认使用根路径。

  1. log.dirs

kafka的所有消息是保存在磁盘上的,而存放这些日志片段的目录通过该参数指定。

  1. num.recovery.thread.per.data.dir

一般有三种情况,kafka会使用可配置的线程池来处理日志片段
1.服务器正常启动,用于打开每个分区的日志片段。
2.服务器崩溃后重启,用于检查和截短每个分区的日志片段
3.服务器正常关闭,用于关闭日志片段
默认情况下,每个日志目录都只使用一个县城。

  1. auto.create.topics.enable

一般有3个情况,kafka会自动创建主题
1.当一个生产者开始往主题写入消息时。
2.当一个消费者开始从主题读取消息时。
3.当任意一个客户端向主题发送元数据时。

主题的一些默认配置

  1. num.partitions

为一个整数,代表指定了新创建的主题将包含多少个分区。

  1. log.retention.ms

kafka通常根据时间来决定数据可以保留多久。
默认使用log.retention.hours参数来配置时间,并且默认时间为168个小时,也就是1周

  1. log.retention.bytes

通过保留的消息字节数来判断消息是否过期。作用于每一个分区上。
例子:如果一个包含8个分区的主题,并且log.retention.bytes=1GB,那么每个主题最多可以保留8GB的数据。

  1. log.segment.bytes

以上3个的配置都是作用到日志片段上的,而不是作用到单个消息上的。
首先,当消息到达broker时,他会被追加到分区上的当前日志片段上。而日志片段的大小如果超过了log.segment.bytes指定的上限(默认为1GB),当前日志片段就会被关闭,一个新的日志片段会被打开。

  1. log.segment.ms

用于控制日志片段关闭时间的参数,指定了多长时间后日志片段会被关闭。

  1. message.max.bytes

用于限制单个消息的大小,默认是1000000,即1MB。如果生产者发送的消息超过这个大小,那么这个消息不会被broker接收,并且生产者还会受到broker返回的错误信息。


总结

本文大概从这么几个方面进行概述:
1.Kafka的相关概念。
2.Kafka的一个简单使用和安装。
3.Kafka的broker和topic有关的配置和解析。
下一篇文章会根据Kafka的生产者消费者以及API层面去详细的介绍。

猜你喜欢

转载自blog.csdn.net/Zong_0915/article/details/109258714