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集群区分每个节点的唯一标志符
设置kafka的数据存储路径
注:这个目录下不能有其他非kafka的目录,不然会导致kafka集群无法启动
设置是否可以删除topic
(默认情况先kafka的topic是不允许删除的)
Kafka的数据保留的时间,默认是7天
Log文件最大的大小,如果log文件超过1g会创建一个新的文件
Kafka连接的zk的地址和连接kafka的超时时间
默认的partition的个数
启动kafka
- 启动方式1,kafka只能单节点启动,所以每个kafka节点都需要手动启动,下面的方式阻塞的方式启动。
启动方式2,守护的方式启动
kafka操作
查看当前kafka集群已有的topic
注意:这里连接的zookeeper,而不是连接的kafka
创建topic,指定分片和副本个数
注:
- replication-factor:副本数
- Topic:主题名
如果当前kafka集群只有3个broker节点,则replication-factor最大就是3了,下面的例子创建副本为4,则会报错
删除topic
查看topic信息
启动生产者生产消息,kafka自带一个生产者和消费者的客户端 A、启动一个生产者,注意此时连的9092端口,连接的kafka集群
B、启动一个消费者,注意此时连接的还是9092端口,在0.9版本之前连接的还是2181端口
这里我们启动2个消费者来测试一下
注:如果不指定的消费者组的配置文件的话,默认每个消费者都属于不同的消费者组
C、发送消息,可以看到每个消费者都能收到消息
D、Kakfa中的实际的数据
数据结构
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名称+分区序号
Indx和log的文件的文件名是当前这个索引是最小的数据的offset
Kafka如何快速的消费数据呢?
- Index文件中存储的数据的索引信息,第一列是offset,第二列这这个数据所对应的log文件中的偏移量,就像我们去读文件,使用seek()设置当前鼠标的位置一样,可以更快的找到数据
- 如果要去消费offset为3的数据,首先通过二分法找到数据在哪个index文件中,然后在通过index中offset找到数据在log文件中的offset;这样就可以快速的定位到数据,并消费
- 所以kakfa虽然把数据存储在磁盘中,但是他的读取速度还是非常快的。