这篇文章上次修改于 2029 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 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个节点失败
没有评论