kafka的特点
- 一个topic中有可以有多个分区。如上图:
- 每个分区中保存的消息都是有序的,在每个分区中都有一个offset,在comsume中维护offset。
- 分区中的消息不会像其他消息队列一样消息完就丢失,而是将其保存,在指定的过期时间点内进行丢弃。
- 分区的特点:首先这使得每个日志的数量不会太大,可以在单个服务上保存。另外每个分区可以单独发布和消费,为并发操作topic提供了一种可能。
- 每个分区中的主从和redis中的士兵模式一样。
- 发布消息通常有两种模式:队列模式(queuing)和发布-订阅模式(publish-subscribe)。队列模式中,consumers可以同时从服务端读取消息,每个消息只被其中一个consumer读到;缺点:一旦一个进程读取了数据,这个数据就会消失。发布-订阅模式是数据发送到不属于同一个消费组的消费者中。缺点:没办法对订阅者的处理能力进行扩展。
- Kafka的客户端和服务器之间的通信是靠一个简单的,高性能的,与语言无关的TCP协议完成的。
- topic分区是消费者进行并行处理的基础。
- 分区中的内容是根据生产者发送的内容的顺序排列的。
-
Kafka的消费群的推广了这两个概念。消费群可以像队列一样让消息被一组进程处理(消费群的成员),与发布 – 订阅模式一样,Kafka可以让你发送广播消息到多个消费群。
Kafka的模型的优点是,每个主题都具有这两个属性,它可以扩展处理能力,也可以实现多个订阅者,没有必要二选一。
-
kafka处理并发:并行性-分区-主题实现主题内的并行处理,Kafka是能够通过一组消费者的进程同时提供排序保证和负载均衡。每个主题的分区指定给每个消费群中的一个消费者,使每个分区只由该组中的一个消费者所消费。通过这样做,我们确保消费者是一个分区唯一的读者,从而顺序的消费数据。因为有许多的分区,所以负载还能够均衡的分配到很多的消费者实例上去。但是请注意,一个消费群的消费者实例不能比分区数量多。
-
kafka的生产者提供了当消息到达队列后给予回应这时就知道消息已经到达队列,否则记录写入失败。
-
kafka对于生产者将消息传入消息队列和将消息从消息队列放入消费者中提供了使用流进行处理,这样的好处是可以把消息队列中的历史数据和未来的数据通过相同的方式进行出理。流也解决了数据的低延迟问题。
参考内容 kafka