Kafka高可用实例
kafka 建议不要用 单分区的Topic 去进行消息的持久化存储,这要会导致一些问题。
例如:一个集群原本有三个节点,但是只用了一个节点。Kafka集群中一个节点出问题了,而有需要用到的服务对应的 Topic 单分区在这个节点上,服务所有的副本都部署在这个节点上,就会导致服务的功能异常,整个功能不可用。
这种叫 单点故障,不满足高可用。解决方法也很简单,调整 Topic 的分区数量即可。
调整 Topic 的分区数量,需要分区的副本数量和 kafka 集群节点数量保持一致,确保当 kafka 其中一个节点出现问题时,对应的服务功能能够正常工作。
这个问题,Topic 分区对应的服务全都在一个节点内,其他节点没有对应的 Topic 分区时,当这个节点出现问题,就会导致整的服务挂掉。
但是如果多分区,就能让问题服务能够正常运行,这其实归于Kafka的分区策略、负载均衡策略和故障转移策略。
当从 1 个分区增加到 3 个分区时,增加分区数量,这样可以分散负载,提高并行处理能力。一般来说,还是会手动将 3 个分区分配到 3 个broker中,一个broker内分别有3个分区及他们的副本,保证可用性,也应证了这句话
需要分区的副本数量和 kafka 集群节点数量保持一致
。这样做之后,一个Topic就在多个节点上有多个分区,即便一个节点挂了,其他分区也有对应的分区及副本,保证可用性这样当有这个 Topic 分区的节点出问题时,上面的服务所在的分区就会自行进行新的Leader选举,因为其他的节点有可用分区及副本,及保证了的高服务可用。
总结
不要那么傻傻的一个Topic里只有一个节点挂载着服务的分区和副本,要保证可用性,最好就是多节点都有对应的服务分区和副本。
记得别忘了把消费者上涨到上调到 Topic 分区数+1或以上个的数量,这是为了保证每个分区的消息队列都有消费者进行消费,即便消费者挂掉了一个,也有新的消费者填上,一致保持着良性的消费过程,不让消息堆积在消息队列中。
评论(0)