设为首页 收藏本站
查看: 1205|回复: 0

[经验分享] kafka设计要点简介

[复制链接]

尚未签到

发表于 2019-1-31 09:36:26 | 显示全部楼层 |阅读模式
  最近在学习kafka,参考官网上的文档,概括kafka的主要设计点,希望能帮助大家对kafka的设计有一个大概的了解,没说清楚的地方,或者不对的地方希望大家指出,相互帮助学习,
4.       kafka设计简介
1   
2   
3   
4   
4.1    动机

  •   高吞吐量以支持大数据量的事件流,例如实时日志集结
  •   能很好处理大数据积压以支持线下阶段性数据加载
  •   低延迟的消息传送,以支持传统的消息系统应用
  •   支持分区,分布式,实时处理
  •   高可用,故障容错
因此,kafka被设计成一个有独特的元素,类似于数据库日志的传统的消息系统

4.2    持久化

  •   Kafka直接依赖系统的文件系统存储和缓存,(java NIO)


  •   常量时长足够了
消息系统大多数使用Btree作为持久化数据结构,存储系统一般混合了高速缓存和真正的磁盘读取,所以读取性能是不错的。但是随着数据量的成倍的增长,性能也会成倍的下降
所以kafaka 使用的是持久化队列,这样设计明显的优势是与数据量大小无关,并且读不会阻塞写,服务器可以利用便宜的硬盘获得可观的性能
4.3    效率
  支持批量存取,批量会有的影响,大的网络数据包,大的连续的磁盘操作,连续内存块请求等等,所有这些都可以使kafka将突发性的大的数据流量转变为线性写
  支持数据压缩,并使用直接内存(javaNio)避免不必要的程序级别的复制,支持批量数据压缩(这样比单独压缩一个消息更有效),只有在消费信息的时候才会解压
4.4    Producer(生产者)
  负载均衡
  生产直接可以将消息发送到broker而不需要任何中间路由,因为kafka每个节点都提供关于其主题每个分区的leader在那个节点的相关元数据查询
  异步发送
  批量操作是效率提升的一个重要驱动,producer可以在指定的边界缓存操作以批量操作
4.5    Consumer(消费者)

  •   Push vs poll
  Kafka遵从大多数消息系统的设计,由producer将数据push到broker,由consumer 从
  Broker pull数据。而Scribe and Apache Flume 遵从了一个不同的设计(push based),但这样有个坑,假如consumer的处理效率没有broker转发效率高,就有可能压垮消费者
4.6    消息传播
4.7    复制

  •   法定人数和状态机
大部分日志复制都采用state-machinestyle,即只要领导者可以用,领导者选择那些命令用来复制,跟随者只要有序的复制这些值就可以了
大部分系统使用多数人投票策略(This majority vote approach)来决定leader和消息提交确认,这样的好处就可以选择其中最快的机器作为新的leader.但是这种策略的坏处是,系统不能容忍多的故障。比如你要能容忍f个错,你就必须有2f+1的复制才足够,这样对于大规模数据来说是不可行的,因为这样你损失了太多吞吐量了,比如(paxos算法)
而kafak利用zookeeper动态地维护了一套in-syncreplica(ISR),只有ISR集里面的才可以被选为leader,所以容忍f个故障,只要有f+1个复制就可以了。虽然要容忍f个故障,
  Majority vote 和 ISR都需要等同样多的复制完成。
kafka另一个特性是允许有不完整数据的节点恢复

  •   耐用和高可用保证
Producer配置request.required.acks=-10,1
0
1表示只要in-sync里的replica都接受了,就认为提交成功
-1 表示要in-sync里的复制都完成写了,才认为提交成功

  •   复制管理
以上复制讲的是一个主题的一个分区,而kafka管理者上千个这样的分区。所以kafka平衡分区以避免集中一个大的topic的所有分区在几个节点(broker)上,因此kafka将领导职权平衡到所有节点上,每个节点都是它所保存的分区的一部分的leader
当一个节点失败,只会对受影响的分区进行选举,我们选择一个broker作为controller,controller负责侦测broker级别的错误,并负责受影响分区重新选择leader
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-669895-1-1.html 上篇帖子: java大数据之“Kafka” 下篇帖子: Kafka的使用和错误解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表