kafka的理论知识(干货)

kafka

kafka的组件

Created with Raphaël 2.2.0 开始 producer(发送消息:生产者) kafka集群 consumer(消息接受者:消费者) 结束
  • kafka依赖zookeeper保证系统可用性集群保存一些mate信息(元)

Topics

  • 一个topics可以看作为一类信息
  • 每个topics分为多个partition(区)
  • 每个partition在存储层面是append log 文件
  • 每个发布到此区的消息会被直接追加到log文件的尾部
  • 每个消息在文件中的位置成为 offset(偏移量)
  • offset 是一个long型数字
  • kafka没有索引机制来存储offset 几乎不支持消息的“随读随写”
  • 如果消息被消费不会北直街立即删除,日志文件会根据boker中的配置要求保存一段时间之后删除

1.kafka持久性

kafka使用文件存储消息

  • 对文件进行append操作
  • 磁盘检索的开支是较小的
  • 为了减少写入次数boker会将消息暂时buffer(缓冲)达到一定的阀值时,在flush到磁盘中

2. 性能

  • 对磁盘IO 不用太多占用资源小
  • 对网络IO 需要考虑 支持将消息进过压缩,有gzip/snappy等多种压缩格式

3.生产者(Producer)

3.1负载均衡

  • producer会和topic下的所有partition leader 保持socket 连接,消息有producer直接通过socket发送到broker
  • 消息被路由到那个partiton上由 producer客户端决定 ,可以采用“random”,"key-hash"进行轮询

3.2 异步发送

  • 将多条消息暂存在客户端buffer中,并批量发送到broker
  • 优点:批量延迟发送提高了网络的效率
  • 缺点: producer失效时,尚未发送的数据将会丢失

4.消费者(Consumer)

  • consumer 端 会向broker发送“fetch”请求,并告知其获取消息的offset,此后consumer将会获得一定条数的消息,consumer端也可以重置offset来重新获得消息
  • JMS 模式采用push方式,即boker将消息推送给consumer端
  • kafka采用pull方式 consumer在和broker建立连接之后,主动去pull(或者fetch)消息
  • 优点 根据consumer的消费能力去获取数据并能控制offset

5.消息传送机制

  • JMS :有且只有一次(exactly once)
  • kafka
    • at most once :最多一次和JMS中“非持久化”类似,发送一次无论成功多不会重发
    • at least once :消息至少发送一次 ,未接收成功再次发送知道成功
    • exactly once : 消息只会发送一次

6.复制备份

  • 将每个partition数据复制到多个server上,任何一个partition有一个leader和多个follower(可以没有)备份的个数可以通过broker配置文件来设定

每天都要为进入华为而加油!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值