葵花宝典--kafka

一、kafka概述

kafka是一个分布式的基于发布/订阅模式的消息队列主要应用于大数据实时处理领域。

producer:生产者,向kafka发送数据

consumer:消费者,消费kafka内的数据

consumer group:消费者组,消费者组内的消费者负责消费不同分区的数据,一个分区只能由一个消费者消费,一个消费者可以消费多个分区内的数据,消费者组之间互不影响

broker:一台kafka机器就是一个broker,一个集群多个broker,一个broker可以容纳多个topic

topic:队列的名称

partition:分区,一个topic分为多个分区,每个分区内消息有序

replica:副本,对于分区来说的,每个分区有备份的副本。每个分区都有leader和follower,leader对外提供服务

leader:分区数据的主,对外提供服务

follower:分区数据的备份,并且实时同步leader的数据

二、kafka入门

kafka基于zk运行,需要先安装zk再安装kafka,zk和kafka节点各三台

安装:下载kafka包和zk安装包,zk安装参考前边的博客,kafka安装主要配置server.properties文件

#broker的全局唯一编号,不能重复
broker.id=0
#删除topic功能使能
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka运行日志存放的路径
log.dirs=/opt/module/kafka/logs
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接Zookeeper集群地址
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka

启动kafka:kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

三、kafka深入

1、生产者

分区策略

  • 指定分区
  • 没有指定分区时,根据key的hash%分区数
  • 没有指定分区也没有key时,随机生成一个数%分区数三种分区策略

数据可靠性

  • 副本同步策略:kafka要求副本都同步完成才发送ack,选取新leader时只要半数可用即可
  • ISR:已同步的副本,ASR(所有副本)=ISR(已同步副本)+OSR(掉队的副本)。当ISR中的副本都同步完成,leader会给peoducer发送ack,如果follower中长时间未向leader同步数据,则从ISR中剔除,当leader发送故障时,从ISR中选取leader。
  • ACK应答机制:0:不应答    1:leader落盘后应答    -1:leader和follower都落盘后应答
  • LEO和HW:LEO(每个副本的最后一个offset),HW(所有LEO中最小的,消费者所能消费的最高offset)

Exactly Once语义:保证数据不重复,在0.11版本后增加了幂等性,生产者在发送数据的时候对做缓存,保证消息不重复,但在跨分区和跨会话不能保证

2、消费者

消费方式:消费者以拉的方式进行消费

分区分配策略:随机(容易发送数据倾斜)、轮询

offset维护:0.9之前在zk中维护,之后offset的数据在本地保持,但在zk中又offset对应的topic

3、kafka的高效性

顺序写入、批处理、零拷贝、分布式、分区

4、zk在kafka中的应用

在kafka集群中,broker中又一个时controller,负责broker的上线下,topic的副本分配和leader选举。

5、事务

0.11版本之后引入了事务,引入了全局的事务ID,生产一批数据的时候,发生异常,整批数据一起回滚。事务操作也会在一个topic下进行

你可能感兴趣的:(葵花宝典--kafka)