1.kafka处理持续流动的数据
- 不像关系数据库和kv数据库,把数据堪称持续变化continous evolving 和不断增长 ever growing的流。
- kafka最初使用在社交网络的实时应用和数据流中。现在是 一个流平台Stream platform,可以发布和订阅数据。
2.kafka的比较
3.和普通的消息系统比,如ActiveMQ,RabbitMQ。尽管非常相像。
- kafka可以自由伸缩,可以作为一个公司的消息中心平台。处理整个公司所有的数据流。而其他消息系统一系列是独立的brokers
- kafka是一个存储系统,可以按你的要求时间存储数据。即可副本保存(高可用),可持久话。
- 一般流queue系统只会传递数据,而kafka可以用很少的代码处理派生流/数据集。(derived treams 和datasets)
4.和存储系统相比,可以看成一个实时版本的hadoop
- kafka可以存储和定期处理大量的数据文件
- hadoop长处是数据分析,但是kafka具有实时性,可以用于核心业务的处理
5.和ETL相比,都擅长移动数据。但是kafka只是把数据拆解出来,塞给另一个系统,实际上是一个数据平台。
6.发布订阅消息模式 - 发布者发布消息给broker,不关心谁是reciever
- 消费者只消费他关心类型的消息
7.kafka通用数据类型 - kafka存储的是字节数组(Arrays of bytes),对kafka来说,这些消息对kafka来说,没有特别的格式和含义
- kafka消息可以有一个可选的Optional key,同样是字节数组,对kafka来说,没有特别的格式和含义。key可以用来生成hash来决定分区
8.kafka批次消息 - kafka写入消息是按批次(一组消息)写的。这些消息属于同一个topic和分区partion。这样会节约网络开销,但是批次大也会导致单个消息的传输时间变长。所以要在latency和throughput之间权衡。
- 通常会对批次进行压缩处理,提高传输效率,同时增加了计算处理。
9.kafka message schemas 消息模式 - kafka 被建议用JSON和XML,但是这两者缺乏强类型约束和健壮性,而且不同版本兼容性也不好
- kafka开发者大多采用 Apche Avro ( 最初开发为hadoop使用的序列化框架),作为kafka消息的schemas。Avro提供一种紧凑的序列化格式,Schemas和message payloads是分开的,Schemas变化,不需要重新序列化,向前和向后兼容
- kafka需要这种一致性数据,不能发布端的数据格式变化,引起所有消费端升级。即数据格式的接偶
10.kafka的主题topics - topic是消息的分类方式,好比数据库中的table,topic会被分区,类似数据库中的分表,这也是kafka可以水平扩展的原因。
- kafka 只能保证分区内的有序性,不能保证整个topic的有序性 (time Ordering)。
- 一个分区类似一个commit log,只能追加的方式吸入。
- 这中无界的commit log 一般被描述为流。如果忽略分区,一个topic会被视为一个流。即代表单个数据流 从生产者移动到消费者。
- 流处理框架,有kafka Stream,Storm,及实时real time的操作数据。与之对比的是离线offline处理框架。如hadoop
11.kafka的client----生产者和消费者 - 一般使用key做hash,来决定消息写到哪个分区。也可以自定义分区器partioner。这样根据业务把需要顺序性的业务数据分到同一个分区。
- 消费者使用一种元数据(每个消息生成的时候,都会分配一个offset并保存到消息中,这个类似数据库中的主键,自增的整数)----offset来标记是否已经处理过。
- 消费者把每个分区的读取的偏移量offset,保存到zookeeper,或者kafka本身。如果消费者关闭,那么读取的状态不会丢失。
- 多个消费者会按组划分,但是会保证一个partion只会分给组中特定某一个消费者,以保证分区的顺序性。即一个分区不会分给同一个组内的多个消费者。
12.kafka broker,单个kafka的server被成为brokder - brokder接收生产者发送的消息,并且分配offset给这个消息
13.kafka消息保留retention - 可以设置保留时间。或者topic保留的容量大小,比如某个topic设置了最大保留数据1GB,一旦超过时间或者容量,消息就会被失效,或者删除。所以任何时刻,kafka的消息总量不会超过配置的大小。
- 可以为某个topic单独设置过期时间和容量。
- 还可以设置为log compacted ---紧凑型日志。kafka只会保留最后的一条消息。
14.kafka 多集群 - kafka 集群 内置了副本机制,保证同一个集群可以互为副本
- MirrorMaker 用来同步多个集群之间。MirrorMaker的本质包含了一个Producer和Consumer,Consumer从一个集群上读取消息,然后用Producer发送到另一个集群上
- 多集群的原因有三1.隔离数据类型2.隔离安全级别3多数据中心容灾
15.kafka的使用场景 - 活动记录----Activity Tracking
- Messaging----用户通知等,如邮件,格式化消息(装饰)
- 度量指标和日志记录
- commit log ----事务的基本使用
- Stream processing 流处理
16.kafka 安装环境 - JAVA8,最好安装jdk
- zookeeper---保存Broker和Topic的metadata,另外老版本中,还保存consumer的offset指针,可以使用srvr命令验证zookeeper安装是否正确
- zookeeper的群组叫做Ensemble,由于zookeeper使用了一致性协议,所以最好群组内的节点使用奇数个。这样才能少数服从多数。如果有3个节点,允许1个节点失败,如果有5个节点,那么允许2个节点失败
、