✈️【Kafka实战指南】Kafka安装及日志存储结构

这是我参与更文挑战的第17天,活动详情查看: 更文挑战

kafka安装

Kafka的安装

tar -zxvf kafka_2.11-2.1.1.tgz -C /usr/local/
复制代码

查看配置文件

[root@es1 config]# pwd
/usr/local/kafka/config
[root@es1 config]# ll
    total 84
    -rw-r--r--. 1 root root  906 Feb  8  2019 connect-console-sink.properties
    -rw-r--r--. 1 root root  909 Feb  8  2019 connect-console-source.properties
    -rw-r--r--. 1 root root 5321 Feb  8  2019 connect-distributed.properties
    -rw-r--r--. 1 root root  883 Feb  8  2019 connect-file-sink.properties
    -rw-r--r--. 1 root root  881 Feb  8  2019 connect-file-source.properties
    -rw-r--r--. 1 root root 1111 Feb  8  2019 connect-log4j.properties
    -rw-r--r--. 1 root root 2262 Feb  8  2019 connect-standalone.properties
    -rw-r--r--. 1 root root 1221 Feb  8  2019 consumer.properties
    -rw-r--r--. 1 root root 4727 Feb  8  2019 log4j.properties
    -rw-r--r--. 1 root root 1925 Feb  8  2019 producer.properties
    -rw-r--r--. 1 root root 6865 Jan 16 22:00 server-1.properties
    -rw-r--r--. 1 root root 6865 Jan 16 22:00 server-2.properties
    -rw-r--r--. 1 root root 6873 Jan 16 03:57 server.properties
    -rw-r--r--. 1 root root 1032 Feb  8  2019 tools-log4j.properties
    -rw-r--r--. 1 root root 1169 Feb  8  2019 trogdor.conf
    -rw-r--r--. 1 root root 1023 Feb  8  2019 zookeeper.properties
复制代码

修改配置文件server.properties

设置broker.id 这个是kafka集群区分每个节点的唯一标志符

image.png

设置kafka的数据存储路径

image.png

注:这个目录下不能有其他非kafka的目录,不然会导致kafka集群无法启动

设置是否可以删除topic

(默认情况先kafka的topic是不允许删除的)

image.png

Kafka的数据保留的时间,默认是7天

image.png

Log文件最大的大小,如果log文件超过1g会创建一个新的文件

image.png

image.png

Kafka连接的zk的地址和连接kafka的超时时间

image.png

默认的partition的个数

image.png

启动kafka

  • 启动方式1,kafka只能单节点启动,所以每个kafka节点都需要手动启动,下面的方式阻塞的方式启动。

image.png

  • 启动方式2,守护的方式启动

image.png

kafka操作

查看当前kafka集群已有的topic

image.png

注意:这里连接的zookeeper,而不是连接的kafka

创建topic,指定分片和副本个数

image.png

注:

  • replication-factor:副本数

  • Topic:主题名

如果当前kafka集群只有3个broker节点,则replication-factor最大就是3了,下面的例子创建副本为4,则会报错

删除topic

image.png

查看topic信息

image.png

image.png

启动生产者生产消息,kafka自带一个生产者和消费者的客户端
A、启动一个生产者,注意此时连的9092端口,连接的kafka集群

image.png

B、启动一个消费者,注意此时连接的还是9092端口,在0.9版本之前连接的还是2181端口

这里我们启动2个消费者来测试一下

image.png

image.png

注:如果不指定的消费者组的配置文件的话,默认每个消费者都属于不同的消费者组

C、发送消息,可以看到每个消费者都能收到消息

image.png

image.png

D、Kakfa中的实际的数据

image.png

image.png

数据结构

Topic是一个逻辑上的概念,而partition是物理上的概念

每个partition又有副本的概念

每个partition对应于一个log文件,该log文件中存储的就是生产者生成的数据,生产者生成的数据会不断的追加到该log的文件末端,且每条数据都有自己的offset,消费者都会实时记录自己消费到了那个offset,以便出错的时候从上次的位置继续消费,这个offset就保存在index文件中

kafka的offset是分区内有序的,但是在不同分区中是无顺序的,kafka不保证数据的全局有序

kafka原理

由于生产者生产的消息会不断追加到log文件的末尾,为防止log文件过大导致数据定位效率低下,Kafka采用分片和索引的机制,将每个partition分为多个segment,每个segment对应2个文件

  • index文件和log文件,这2个文件位于一个相同的文件夹下,文件夹的命名规则为topic名称+分区序号

image.png

Indx和log的文件的文件名是当前这个索引是最小的数据的offset

Kafka如何快速的消费数据呢?

image.png

  • Index文件中存储的数据的索引信息,第一列是offset,第二列这这个数据所对应的log文件中的偏移量,就像我们去读文件,使用seek()设置当前鼠标的位置一样,可以更快的找到数据

  • 如果要去消费offset为3的数据,首先通过二分法找到数据在哪个index文件中,然后在通过index中offset找到数据在log文件中的offset;这样就可以快速的定位到数据,并消费

  • 所以kakfa虽然把数据存储在磁盘中,但是他的读取速度还是非常快的。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享