Kafka

Kafka #

基本概念 #

  • 基于拉模型,offset默认保存在Zookeeper上,也可以手动保存。
  • 基于ZooKeeper实现动态扩容。
  • 生产者不会立即发送消息,而是将消息积攒一批后发送。Broker将批量消息作为一个整体处理,在消费者消费时才将其解开。

使用方法 #

  • 在设定consumer group的时候,只需要指明consumer数量即可,无需指定partition,consumer会自动进行rebalance。
  • producer端发送消息时只需指定topic,无需指定partition,Kafka会把收到的message进行load balance,均匀的分布在这个topic下的不同的partition上。

集群架构 #

扩容 #

当添加新的partition的时,原partition里面的message不会重新进行分配,只有进入topic的新message才会通过load balance添加到新的partition。

重平衡 #

什么时候会发生重平衡

  • Partition扩容。
  • 消费者数量发生变更。
  • 订阅的规则发生变更(例如基于正则订阅,新创建的主题也符合规则)。

重平衡时Kafka不可用,所以应通过提高session.timout.msmax.poll.interval.ms的值和降低heartbeat.interval.ms的值来减少重平衡次数。