浅谈kafka

Kafka框架

1)Producer :消息生产者,就是向 kafka broker 发消息的客户端;

2)Consumer :消息消费者,向 kafka broker 取消息的客户端;

3)Consumer Group (CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负 责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所 有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。

4)Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。

5)Topic :可以理解为一个队列,生产者和消费者面向的都是一个 topic;

6)Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上, 一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列;

7)Replica:副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,且 kafka 仍然能够继续工作,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本, 一个 leader 和若干个 follower。

8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对 象都是 leader。

9)follower:每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据 的同步。leader 发生故障时,某个 follower 会成为新的 follower。

Kafka底层

kafka高性能吞吐的原因:

1.磁盘顺序读写:保证了消息的堆积
    顺序读写,磁盘会预读,预读是在读取的起始地址连续读取多个页面,主要时间花费在了传输时间上,而这个时候两种读写可以认为是一样的。
    随机读写,因为数据没有在一起,将预读浪费了,需要多次寻到和旋转延迟,而这个时间可能就是传输时间的多倍。
2.零拷贝:避免CPU将数据从一块存储拷贝到另一块的存储技术
    传统的数据赋值:
        1.读取磁盘文件数据到内核缓冲区;
        2.将内核缓冲区的数据copy到用户缓冲区;
        3.将用户缓冲区的数据copy到socket的发送缓冲区
        4.将socket发送缓冲区中的数据发送到网卡,进行传输;
    零拷贝
    磁盘文件->内核空间读取缓冲区->网卡接口->消费者进程
3.分区分段+索引
    kafka的message消息实际上是分布式存储在一个个小的segment中,每次文件操作也是直接操作segment,为了进一步的查询优化,kafka有默认为分段后的数据文件建立了索引文件,就是文件系统上的.index文件,这中分区分段+索引的设计,不仅提升了数据读取的效率,同事也提供了数据操作的并行度;
4.批量压缩:多条消息一起压缩,降低宽带,批量读写
5.直接操作page cache,而不是JVM,避免GC耗时及创建对象耗时,且读写速度更高,缓存也不会丢失。

消息可靠性:ACK应答机制

broker收到producer生产的数据之后,有一个确认反馈机制,表示数据是否收好
1:接收到partition中的leader确认数据保存好
0:不接受partition中的leader的任何反馈数据
-1:接受到partition中的leader以及所有副本确认数据保存好的通知

kafka优缺点

优点:
高性能:单机测试能达到 100w tps;
低延时:生产和消费的延时都很低,e2e的延时在正常的cluster中也很低;
可用性高:replicate + isr + 选举 机制保证;
工具链成熟:监控 运维 管理 方案齐全;
生态成熟:大数据场景必不可少 kafka stream

成熟,开原,吞吐量高,并发性强,可用性高
缺点:
无法弹性扩容:对partition的读写都在partition leader所在的broker,如果该broker压力过大,也无法通过新增broker来解决问题;
扩容成本高:集群中新增的broker只会处理新topic,如果要分担老topic-partition的压力,需要手动迁移partition,这时会占用大量集群带宽;
消费者新加入和退出会造成整个消费组rebalance:导致数据重复消费,影响消费速度,增加e2e延迟;
partition过多会使得性能显著下降:ZK压力大,broker上partition过多让磁盘顺序写几乎退化成随机写。
集群内一台down机,其他分区分担压力,但消息会乱序;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值