1.kafka处理实时应用和持续流数据(大数据流管道),可以订阅和发布数据流,集群并且可以存储数据。与传统的消息中间件不同的是消息中间件只是传递消息,而它是流的方式处理。Hadoop是大数据的数据分析,kafka是流的方式实时处理。与etl相比除了把数据移动到另外一个地方外还能在移动过程中触发其他数据流应用。总结为流平台系统。
2.存储单元为消息是二进制,并且传输是以批次进行(同一个主题和同一个分区)
3.消息使用模式的序列化,解耦了订阅和发布
4.kafka使用主题和分区进行数据存储。默认情况生产者只需要把消息投递到主题不需要分区信息,但是kafka还是提供了自定义分区让生产者指定存入那个分区。
5.消费者提供偏移量爱读取消息,断点续读。(偏移量保存在kafka或者zookeeper中)
6.消费者可以使用群组的方式读取多个主题,相当于是多线程读取消息。
7.消息持久化可以依据时间和大小确定是否需要删除,但是也提供了针对主题的定制。
8.kafka使用场景:活动跟踪(收集前端用户操作),消息传递,日志记录后分析,提交日志,流处理。
9.kafka集群配置:broker.id集群唯一,port监听端口,zookeeper.connect是zookeeper集群的链接
10.kafka启动可以使用后台启用模式。启动时添加daemon参数。
11.卡夫卡关注主题,分区,同步异步生产者,broker
12.生产者推送消息给broker,注意此处消费者是通过去取数据的方式消费消息(原因是broker不用管消费者状态,但是最重要的是解决由于生产者产生的数据量特点大和快先写入broker后,如果直接推送给消费者可能消费者处理不过来,因此采用消费者自己去取的方式消费,这样设计使得broker设计更简单,并且能处理峰值问题导致消费者程序处理不过来的时候)。
13.生产者不需要依赖zookeeper,当生产者创建连接时可以提供几个broker的链接(例如300个集群broker只需要提供3个链接),生产者只要链接成功一个便可以知道整个集群的列表和集群中国有多少个topic和每个topic有多少分区和每个分区在那个broker上。当获取到这些数据后会把他们存在生产者的内存中,如果生产者向某个broker发送数据发现链接不上(各种原因)broker会开始刷新以前记录的数据,另外一种是在创建broker时定义的定期刷新。
14.消费者是通过zookeeper方式获取broker群的信息。 
15.一个topic可以包含1个或者多个分区,如果是broker集群会把分区均匀的分配到不同的broker中(假如一个topic9个分区,有3个broker,这时候会在每个broker上放3个分区),一个Partition只分布于一个Broker上(不考虑备份),一个Partition物理上对应一个文件夹,一个Partition包含多个Segment(Segment对用户透明),一个Segment对应一个文件(由index文件和log文件组成),Segment由一个个不可变记录组成,记录只会被append到Segment中,不会被单独删除或者修改,清除过期日志时直接删除一个或多个Segment(可以设置多大分区时删除文件或者超过某个时间就删除)。
16.每个分区会指定对应的leader(broker),replicate(复制)
17.在配置kafka配置文件时可以配置多个日志文件夹,中间逗号隔开(这种情况使用于在服务器挂在了多个磁盘的情况,可以实现多个磁盘均等分)
18.生产者可以自定义把数据放在哪个分区上(如果消息具有相同的key,那么数据将放到相同的分区上,这样后续对数据可以集中处理,比如同一个用户产生的数据)。
19.同步生产者(等消息发送到broker后返回),异步生产者(消息发送其实是放在了一个queue中,等达到一定要求后统一发送,不用等待)
20.消费者读取数据是通过offset开始的,运行重复读取以前数据(移动offset位置),这个读取指针需要消费者自己维护。
21.一般mq系统消息被消费后会被删除,卡夫卡设计消息可以根据时间或者大小进行保存。
22.卡夫卡允许用户自定义消息投递到那个分区的算法。这个好处就是相同的消息key会被分配到指定的分区中,消费者就可以有目的的去消费具体的分区消息。
23.消息发送可以配置消息集大小(先把消息缓存到一定数据后发送),也可以配置多久发一次,这样减少了每条消息与broker交互的消耗减少IO操作。
24.由于生产者产生消息速度大于消费者,所有kafka才有消费者取的模式消费消息,这种方式有一个弱点就是当没有消息的时候消费者会不停的轮训broker,这样浪费了资源,因此kafka设计时有个参数可以阻塞消费者线程直到broker中有数据,或者说消息数目达到某一个值在消费(目前我还么有找到)
25.分区实现leader选举时controler节点控制。当controler死掉会从新在分区节点中选一个出来当controler、
26.生产者提供了2个方法发送数据到broker,一个是逐条发送一个是批量发送。并且都提供了同步发送和异步发送。
27.由于每个broker都保存了所有的元数据,productor在链接任意一台broker后都可以发送消息到其他broker。只要在消费者在初始化配置的broker列表中有一个可用就能满足要求,这样解耦了生产者和zookeeper的关联。producer的send函数默认没有返回值。出错处理有EventHandler实现。
28.多个消费者使用相同的组id则实现消费者端的负载均衡并且也是实现了容错性(当一个消费者挂后其他消费者会继续消费),kafka在broker中实现分区达到了分布式部署并使用副本方式实现集群因此既有负载均衡也有容错机制。
29.kafka的connector实现了异构数据导入到kafka中和kafka中导出数据到其他系统中。
30.kafka的stream和spark、storm的流处理区别比较。