kafka是一个基于zookeeper协调的分布式消息系统,并且有分区,数据多副本存储的特性。最早是由linkedin公司开发。该公司后来将其贡献给Apache基金会,变成了一个优秀的开源项目。kafka可以实时的处理海量的数据来满足业务的场景,比如日志的收集,生产者和消费者等

kafka的特性

  • 灵活性:kafka集群支持机器和partition的在线扩展
  • 高吞吐量:Kafka每秒可以处理几十万条消息
  • 持久性:消息会持久化到kafka的磁盘上
  • 容错性:因为kafka支持多副本,所以允许最多副本数减一的失败
  • 高并发:单节点可以支持上千个客户端的访问

kafka-consumer




kafka实现高并发 kafka高并发基于什么实现_kafka

图1




kafka实现高并发 kafka高并发基于什么实现_持久化_02

图2



  • 多个消费线程(consumer)可以组成一个消费组(consumergroup)。当broker的数量发生变化的时候,那么consumer会进行reblance。而当consumer的数量发生变化的时候,consumergroup会内部进行reblance。
  • 理论上来说同一个partition中的message可以由不同的消费组(consumergroup)中的consumer进行消费,同一个消费组(consumergroup)中的consumer不能消费同一个partition中的message,但是同一个消费组(consumergroup)中的consumer可以消费不同partition中的message。这里的message消费都是顺序的从partition中消费。
  • 为了保证kafka的高吞吐量,一个消费组(consumergroup)中的一个consumer只能访问消费一个partition。如果需要提高效率的话,可以横向扩展partition的数量,同时增加消费组(consumergroup)中consumer的数量。如果说有多个service需要消费同一个topic,那么只需要在kafka中增加新的消费组(consumergroup)就可以了,消费组之间消费Message互不影响。一般来说消费组(consumergroup)中consumer的数量应该与partition数量相等,这种情况下效率是最优的

好了,以上就是kafka的介绍了,之后的话,打算讲讲kafka的数据是持久化到磁盘上,为什么访问速度还是很快呢,以及用golang语言写一些demo来实际演示一下对kafka的使用。