一、 什么是kafka?
答:kafka是一个高吞吐量、分布式的发布订阅消息系统,至于其吞吐量到底有多高,可以参考这篇博文:https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines,kafka被广泛应用于两大类的应用,分别是:1、可靠的从其他业务系统或者应用获取数据的实时流数据管道应用;2、传输或者扮演数据流角色的实时流应用。
二、 kafka有哪些核心的api?
答:四类API,分别是:1、生产者API(Producer API)允许应用发布消息到一个或者多个kafka主题中;2、消费者API(Consumer API)允许应用订阅一个或者多个主题并处理数据流;3、流API(Streaming API)允许应用去扮演流数据处理者的角色,可以从一个或者多个主题中消费并且也可以向一个或者多个主题生产数据流,高效的进行传输;4、连接器API(Connector API)可以在一个现有的应用或者业务系统中建立并且运行可复用并且连接者kafka主题的生产者或者消费者,举个例子,如果连接了关系型数据库,那么它可以捕获表中的每一个数据变化。它们直接的关系如下图所示:
三、 kafka是如何做到高吞吐量的呢?
答:分布式是一个其中一个原因,分区(partition)也是其中一个原因。一个kafka集群有多台节点(broker),每个broker可以有多个主题,而每个主题又是有多个分区的,这些分区是分布在各个broker当中,理论上来说broker、分区越多,吞吐量越大,但是也要考虑开销,所以很多时候并不是越多越好。生产者向主题大量地生产消息,kafka会根据一定地算法将数据写入到分布在各个broker的分区中,消费者去消费数据,也是从各个分区中消费数据,kafka不保证从各个分区读的数据是按照原本写地顺序,但是可以保证从一个分区中消费的数据是有序的。已经消费了的数据无法第二次消费,除非使用另外一个groupid。
四、 消费者线程数如何确定?
答:目前而言,最优的方案是有多少个分区,就应该有多少线程,这样才能达到最高的吞吐量,因为kafka分区是不允许多线程去同时消费数据的,所以过多的线程是浪费。
--------------------------------------------------------------------------------------------
以上是我对kafka的一些见解,如有错误劳烦指出,转载请注明出处。
--------------------------------------------------------------------------------------------