当前位置:   article > 正文

kafka知识点_kafka一个topic开多个分区

kafka一个topic开多个分区

kafka要点

  • 创建一条记录,记录中一个要指定对应的topic和value,key和partition可选。 先序列化,然后按照topic和partition,放进对应的发送队列中。

  • kafka,从逻辑上划分,分为多个topic,每个topic由一个或多个partition组成,多个partition分布在不同的机器上,每个partition都有自己的1个或多个备份,每组partion都有一个leader负责接收信息,其他的follower负责复制信息,每个partition内部的记录是有序的,partition之间是无序的。

kafka为什么快,kafka的快指的是较大的读写吞吐量,从读写两个角度来看:

  • 顺序写:比随机写的效率高很多。

  • page cache:由于文件的写入是顺序写,所以读取时利用page cache提升很大效率。

  • zero-copy:使用sendfile方式,减少了用户缓存,调用两次DMA copy,减少了两次CPU copy。

  • consumer使用mmap方式读取文件,减少了一次cpu copy,加速了读数据的效率。

  • 由于多分区的设计,所以consumer可以并发读,加速读取速度。当然多分区也加大了并发写。

  • 攒多条记录,批量处理请求。

  • 消息支持压缩


消息投递可靠性:ack机制

当我们用producer写入数据时,我们需要知道producer是否收到消息同时消息的partition是否已经复制成功,这种向Produce发送消息的确认机制就叫做ack机制,ack机制有三种选择,不同模式有自己的侧重点,要么为了较大的吞吐量,要么为了保证消息的可靠性。

ack有三个可选值:1,0,-1

  • ack=1:这也是ack的默认值,producer只收到leader partition写入成功的消息就认为成功。

  • ack=0:producer把消息发出去,不需要等待任何确认收到的消息。数据可靠性最低,传输效率最高。

  • ack=-1/all:producer把消息发出去,需要等待leader、follower确认收到消息,才认为这条消息是写入成功的。保证了消息的可靠性,但是效率会受到影响。

ack=-1/all就一定保证消息的可靠吗?

不是,当partition只有一个副本时,ack=-1/all就等价于ack=1。所以当想设置ack=-1/all时,先检查partition的副本数是否为1。


kafka中zookeeper做了什么事

  • zk记录了所有broker的存活信息,broker会向zk发送心跳来上报自己的状态。zk维护了一个正在运行的broker列表。

  • 从多个broker中选举出controller,controller负责管理集群所有分区和副本的状态,比如某个分区的leader故障了,controller会选举出新的leader。如果一个broker故障了,所有在该broker上的leader都会被重新选举。

  • 限额权限:kafka允许client有不同的生产和消费的限额,这些限额配置信息保存在zk中。所有的topic的访问控制信息也在zk中维护。

  • offset:kafka旧的版本中将offset存储在zk中,新版本中,kafka专门做了一个offset manager

  • 和broker一样,consumer也需要向zk注册。 Producer不需要管理,随便一台计算机都可以作为Producer向Kakfa Broker发消息。

kafka还有一些场景用到了zk,详情参见:

http://t.zoukankan.com/yogoup-p-12000545.html

https://www.jianshu.com/p/a036405f989c

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/1009711
推荐阅读
相关标签
  

闽ICP备14008679号