Kafka
Kafka简介
Kafka用于各个子系统(微服务)的数据交换。
每个子系统从Kafka读取数据。
Kafka原理
Kafka介绍
用于缓存数据存储,可重复读。 消息接收者称为:Consumer kafka集群由多个Kafka实例组成。每个实例称为brokr。 无论是kafka集群还是consumer都依赖Zookeeper集群来保存一些meta信息,来保证系统的高可用性。 生产者:向broker发送消息。 消费者:consumer 向broker读取消息,消费者跟。 TOPIC:主题 消费者组:每一个组由一个或多个消费者组成,多个消费者,可实现拆分读取数据。组与组之间都可重复读取数据。 Partiton:将数据拆分,算法是通过取模的方式。 leader:数据存储和读取 follower:数据备份
Kafka安装
安装包下载:https://archive.apache.org/dist/kafka/0.11.0.2/kafka_2.11-0.11.0.2.tgz
kafka_2.11-0.11.0.2.tgz 2.11为开发语言版本,0.11.0.2 kafka版本。
tar zxf kafka_2.11-0.11.0.2.tgz -C /opt/module cd /opt/module mv kafka_2.11-0.11.0.2 kafka cd kafka/ mkdir logs egrep -v "#|^$" /opt/module/kafka/config/server.properties #系统唯一不看重复 broker.id=1 #开启删除topic功能,物理删除 delete.topic.enable=true host.name=172.168.1.61 listeners=PLAINTEXT://172.168.1.61:9092 advertised.listeners=PLAINTEXT://172.168.1.61:9092 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 #不紧放日志还要放数据。 log.dirs=/opt/module/kafka/logs/ num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=168 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 #zookeeper的集群地址 zookeeper.connect=172.168.1.61:2181,172.168.1.62:2181,172.168.1.63:2181 zookeeper.connection.timeout.ms=6000 group.initial.rebalance.delay.ms=0 scp kafka2020-03-16.tar.gz 172.168.1.62:/opt/module scp kafka2020-03-16.tar.gz 172.168.1.62:/opt/module #172.168.1.62节点 cd /opt/module/ tar zxf kafka2020-03-16.tar.gz vim /opt/module/kafka/config/server.properties broker.id=2 #172.168.1.63节点 cd /opt/module/ tar zxf kafka2020-03-16.tar.gz vim /opt/module/kafka/config/server.properties broker.id=3
启动kafka前需要先启动所有zookeeper集群
/opt/module/zookeeper-3.4.14/bin/zkServer.sh start
启动kafka所有节点
/opt/module/kafka/bin/kafka-server-start.sh /opt/module/kafka/config/server.properties & 或 /opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties
Kafka命令操作
创建topic
/opt/module/kafka/bin/kafka-topics.sh --zookeeper 172.168.1.61:2181 --create --topic first --partitions 3 --replication-factor 2 --zookeeper 172.168.1.61:2181 #连接到zookeeper --create --topic first 创建 名称first --partitions 3 #定义分区的数量 --replication-factor 2 #副本数
查看topic
/opt/module/kafka/bin/kafka-topics.sh --zookeeper 172.168.1.61:2181 --list
查看topic详情
/opt/module/kafka/bin/kafka-topics.sh --zookeeper 172.168.1.61:2181 --describe --topic first
Topic:first PartitionCount:3 ReplicationFactor:2 Configs:
Topic: first Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
Topic: first Partition: 1 Leader: 2 Replicas: 2,3 Isr: 2,3
Topic: first Partition: 2 Leader: 3 Replicas: 3,1 Isr: 3,1
删除topic
/opt/module/kafka/bin/kafka-topics.sh --zookeeper 172.168.1.61:2181 --delete --topic first
创建数据,创建数据前需要先创建topic
创建生产者
/opt/module/kafka/bin/kafka-console-producer.sh --broker-list 172.168.1.61:9092 --topic first
创建消费者
/opt/module/kafka/bin/kafka-console-consumer.sh --zookeeper 172.168.1.61:2181 --topic first --from-beginning
当kafka集群的某个节点故障线下后,重新加入集群,数据会存在不平衡现象,通过命令可重新分配。
/opt/module/kafka/bin/kafka-preferred-replica-election.sh --zookeeper 172.168.1.61:2181
Kafka写入流程
peoducer采用push模式将消息发布到broker,每条消息都被追加到分区patition中,属于顺序写磁盘。
kafka高吞吐量
kafka顺序写数据。
kafka零复制 不读取数据,kafka直接通过sendfile指令,从操作系统直接发送数据到用户,不用再将数据读取到应用层。
kafka分段日志,数据拆分成多个文件,需要读取数据时,直接将一块数据读取,不需要再将整个数据读取。
kafka预读,将相邻的数据一起读取出来。
kafka后写, kafka直接将数据交给操作系统的缓存,操作系统定时将数据写入磁盘,不需要将数据存放到buffer中。
kafka分区
topic+分区
Partition:分区 类似于分片,将数据拆分到不同kafka节点上。可指定
topic:主题 不同用户读取不同的主题。
kafka工作流程
1.客户端连接kafka。
2.kafka从zookeeper中获取kafka的leader信息
3.leader会将数据写入logs中。
4.followers从leader获取pull数据。并将数据写入log,成功后返回ack到leader。
kafka应答机制
ack=0 不关心Kafka是否接受到数据,直接发送下一条数据,丢失数据的几率非常大。
ack=1 接受leader的确认,并保证leader数据写入log,但不保证leader的数据写入follower上。但leader传输过程中leader重新故障,数据全丢(默认模式)。
ack=-1(all) 接受集群的节点都写入log上,再返回ACK,生产者才能发送下一条数据,最安全,但效率最低。

浙公网安备 33010602011771号