Kafka学习笔记

这个是给我自己的用来保存的,不是面向大家的哟

一、kafka架构
分区是为了负载均衡
消息的最大保留时间7天
Broker相当于服务器;
Follower是Leader的副本,两者在不同机器;(定义的副本为2,就是Leader+Followe = 2)
生产者和消费找的是leader;
1.消费者
a.一个Topic的一个分区,在同一时间内,只能被消费者组中的一个消费者使用,但是可以同时被不同消费者族的消费者使用;
b.消费者保存消费信息在kafka中
二、基本命令行命令
1.查看服务器中的topic
kafka-topics.sh --zookeeper kafka1:2181 --list
2.创建topic
kafka-topics.sh --zookeeper kafka1:2181 --create --partitions 1 --replication-factor 3 --topic first
副本数是当前可用的副本(必须小于等于broken的数量)
3.删除topic
kafka-topics.sh --zookeeper kafka1:2181 --delete --topic first
4.描述topic
kafka-topics.sh --zookeeper kafka1:2181 --describe --topic first
5.生产者
kafka-console-producer.sh --broker-list kafka1:9092 --topic first
6.消费者
kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic first
对于一个处于离线状态的消费者,上线后若要从头获取信息,需要加一个参数–from-begininig
三、Kafka架构深入
3.1Kaka工作流程及文件存储(6页)
1.每个分区都有一个单独的offset,
无法保证消息的全局有序性,只可保证区内有序性
2.kafka文件存储机制(8页)
‘.index’中存的是每个信息的起偏移量,通过二分查找获得索引
3.2kafka生产者(9页)
1.isr:是动态同步副本队列,会选一些follow放在里面,当leader挂掉,会在里面选一个新的leader,
通过follow与leader的交互时间选取follow加入isr,时间通过replica.lag.time.max.ms选项设定
2.ack应答机制:处理数据丢失和重复问题
如果等全部follower同步完再发送ack,太慢,选一些follower放到isr中,isr中的followe同步万就可以发送ack。
ack还有多种可选优先级(11页):特别的 选项为 -1时的follower是isr中的, isr中的follower同步完成后,在向producer发送ack之前,leader挂掉,就无法发送ack,则会在isr中重新选择一个leader,producer因为没有收到ack,所以选择重新发送信给leader。
3.HW可保证消费者消费数据的一致性
4.Exactly Once语义(13页)
At Least Once语义(ack为-1)保证数据不丢失,但不能保证不重复,At Most Once语义(ack为0)保证数据不重复,但不能保证不丢失。
幂等性:就是对数据去重
3.3消费者(14页)
1.分区分配策略(当Consumer个数发生变化时,触发)
(1)RoundRobin(轮询)使用条件是消费者组订阅的Topic一样

P0->C0,P1->C1,P2->C2.P3->C0。。。。。。这样的方法。
阿斯顿萨的
如果有两个Topic,会将两个Topic的分区进行排序,之后消费者组按顺序轮询
(2).Range(默认策略)
阿斯顿萨的
7个Parition,3个Consumer, 7/3==2余1,每个里面放2个,剩下按顺序放
则P0,1,2->C0,P3,4->C1,P5,6->C2
2.offset维护
(1)zk中按消费者组+Topic+Partition保存
(2)kafka中按消费者组+Topic+Partition保存,确定offset
3.4高效数据读写
1)顺序写磁盘
2)零拷贝技术
事务
1.producer事务
需要一个引入TransactionID(客户端赋予),producer挂掉,通过TransactionID获取之前的PID,
解决精准一次性写入集群
第四章 KafkaAPI

1.信息采用异步发送
就是说,每一条消息都是独立发送的,并不是说收到一条信息的ack后才去发送下一条,ack的目的是为了Producer的数据不丢失

2.消费者保存offset问题
若没有设置自动提交offset,则consumer会把读取的offset放到内存中,在内存中更新offset,不将offset保存到kafka,一旦关闭,再开启新的offset会丢失,会读取原来kafka中的offset
3.手动提交offset
将ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG设置为 flase

1)同步
consumer.commitSync();
2)异步
consumer.commitAsync();
3)自定义
在消费者的订阅中设置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值