Kafka总结

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

1、消息队列

1)点对点模式(一对一)

消费者主动拉取数据,消息收到后消息清除

2)发布/订阅模式(一对多)

消费者消费数据之后不会清除消息,生产者产生的消息会被所有订阅者消费

2、基础架构

brokerKafka服务器,一个broker可以容纳多个topic,topic可以理解为一个队列,为方便扩展,并提高吞吐量,一个topic分为多个partition(Topic :可以理解为一个队列,生产者和消费者面向的都是一个topic).每个分区内部有序

配合分区的设计,提出消费者组的概念,组内每个消费者并行消费(消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个消费者消费;消费者组之间互不影响

为提高可用性,为每个partition增加若干副本,类似NameNode HA

3、命令行操作

需要配合zookeeper一同使用,分别启动

1)查看当前服务器中的所有topic

kafka-topics.sh --zookeeper hadoop102:2181 --list

2)创建topic

kafka-topics.sh --zookeeper hadoop102:2181 \

--create --replication-factor 3 --partitions 1 --topic first

3)删除topic

kafka-topics.sh --zookeeper hadoop102:2181 \

--delete --topic first

4)发送消息

afka-console-producer.sh \

--broker-list hadoop102:9092 --topic first

5)消费消息

kafka-console-consumer.sh \

--bootstrap-server hadoop102:9092 --from-beginning --topic first

6)查看某个Topic的详情

kafka-topics.sh --zookeeper hadoop102:2181 \

--describe --topic first

7)修改分区数

kafka-topics.sh --zookeeper hadoop102:2181 --alter --topic first --partitions 6

4、架构深入

Kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic的。

Kafka采取了分片索引机制,将每个partition分为多个segment。每个segment对应两个文件——“.index”文件和“.log”文件

“.index”文件存储大量的索引信息,“.log”文件存储大量的数据,索引文件中的元数据指向对应数据文件中message的物理偏移地址。

5、 Kafka生产者

同步发送和异步发送

Kafka的Producer发送消息采用的是异步发送的方式

为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),如果producer收到ack,就会进行下一轮的发送,否则重新发送数据。全部的follower同步完成,才可以发送ack。

Leader维护了一个动态的in-sync replica set (ISR),意为和leader保持同步的follower集合。当ISR中的follower完成数据的同步之后,leader就会给follower发送ack。如果follower长时间未向leader同步数据,则该follower将被踢出ISR,该时间阈值由replica.lag.time.max.ms参数设定。Leader发生故障之后,就会从ISR中选举新的leader。

ack应答机制:三种

故障处理细节:

(1)follower故障

follower发生故障后会被临时踢出ISR,待该follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步。等该follower的LEO大于等于该Partition的HW,即follower追上leader之后,就可以重新加入ISR了。

(2)leader故障

leader发生故障之后,会从ISR中选出一个新的leader,之后,为保证多个副本之间的数据一致性,其余的follower会先将各自的log文件高于HW的部分截掉,然后从新的leader同步数据

注意:这只能保证副本之间的数据一致性,并不能保证数据不丢失或者不重复。

6、Kafka消费者

手动提交offset和自动提交offset

consumer采用pull(拉)模式从broker中读取数据。

push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的

确定那个partition由哪个consumer来消费?

分区分配策略:

1)roundrobin

2)range

7、Kafka 高效读写数据

1)顺序写磁盘

2)零复制技术

8、 自定义Interceptor(拦截器)

9、Kafka监控

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值