深入kafka

分区

num.partitions 参数指定了新创建的topic将包含多少个partition。自动创建的topic默认的partition数为该值。
kafka集群通过partition对topic进行横向扩展,所以当有新的broker加入到集群时,可以通过partition个数来实现负载均衡。partition数量不一定比broker数量多,两者之间没有必然联系。

分区数量的选择

为主题选择partition数量并非可有可无,在选择数量时需要考虑如下因素:
1、主题需要达到多大的吞吐量?例如,是希望每秒钟写入100KB还是1GB?
2、从单个分区读取数据的最大吞吐量是多少?每个分区一般都会有一个消费者,如果你知道消费者将数据写入数据库的速度不会超过每秒50MB,那么你也该知道,从一个分区读取数据的吞吐量不需要超过每秒50MB。
3、可以通过类似的方法估算生产者向单个分区写入数据的吞吐量,不过生产者的速度一般比消费者快得多,所以最好为生产者多估算一些吞吐量。
4、每个broker包含的分区个数、可用的磁盘空间和网络带宽。如果消息是按照不同的键来写入分区的,那么为已有的主题新增分区就会很困难。
5、单个broker对分区个数是有限制的,因为分区越多,占用的内存越多,完成首领选举需要的时间也越长。

增加分区

topic基于partition进行伸缩和复制,增加partition的主要目的是为了扩展topic的容量或者降低单个partition的吞吐量。
基于key的topic增加partition会导致一些问题,因为数据写入时会对key做hash,然后对分区数取模,如果增加partition的话,会导致对于同一个key会

减少分区

理论上是不能减少partition个数的。如果想让topic的partition数比num.partitions小,那么需要手动创建该topic。
如果删除了分区,那么该分区中的数据也会被删除,导致数据不一致。无法将这些删除的数据分配给其他分区。如果一定要减少分区数量,只能删除整个topic,然后重建。

副本

1个分区从属于1个broker,该broker被称为分区的首领。1个分区可以分配给多个broker,这个时候会发生复制。kafka通过分区复制来冗余消息。

复制系数

kafka的默认复制系数为3。

首领副本与跟随者副本

首领副本:每个分区都有一个首领副本。为了保证一致性,所有生产者和消费者的请求都会经过这个副本。
跟随者副本:首领以外的副本都是跟随者副本。跟随者副本不处理来自客户端的请求,他们唯一的任务就是从首领那里复制消息,保持与首领状态一致。如果首领崩溃,那么其中一个跟随者会被提升为首领。

如何保证数据一致

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值