Kafka
是一个分布式,支持分区的(partition),多副本的(replica),基于zookeeper协调的分布式消息系统
是一个分布式消息队列,生产者,消费者的功能
对消息保存时根据Topic进行分类,发送消息的为Producer,消息接受者为consummer,依赖于zookeeper
broker:每个kafka实例
topic:
partition:
zookeeper:依赖集群保存meta信息
kafka只能保证一个partition中的消息被某个consummer消息时时顺序的
启动集群:
nohup bin/kafka-server-start.sh config/server.properties &
查看当前服务器中的所有topic
bin/kafka-topic.sh --list --zookeeper hadoop01:2181
创建topic:
bin/kafka-topics.sh --create --zookeeper hadoop01:2181 --replication-factor | --partitions | --topic test
删除topic:
bin/kafka-topics.sh --delete --zookeeper hadoop01:2181 --topic test
消息可靠性:
消息只会被发送一次
至少会发送一次
至多会被发送一次
partition,segement,offset 都是为topic服务的,每个topic可以分为多个partition,一个partition相当于一个大目录,每个partition下面有多个大小不等的segement文件
segement由 index 和 data 组成, 索引和数据,对于partition来说,segement名称从0开始,之后每一个segement为上一个offset的值
ISR;消息副本队列
落后太多,leader从ISR列表中删除
kafka数据一致性:
一致性定义:若某条消息对consummer可见,那么即使leader当机了,在新leader上数据依然可以被读到
1.HighWaterMark : HW partition的高水位,取一个partition对应的ISR中最小的LER作为HW,消费者最多只能消费
到HW所在的位置,另外每个replication都有HW
2.对于leader新写入的msg,consummer不能立刻消费,leader会等待该消息被所有ISR中的副本同步后,更新HW,才能被Consummer消费
Kafka数据完整性:
当producer向leader发送数据时,可以通过request.required.acks参数来设置数据可靠性的级别
特性
高吞吐量,低延迟
可扩展性:kafka支持热扩展
持久性,可靠性:消息被持久到本地磁盘,并且支持数据备份防止数据丢失
容错性:允许集群中节点失败,(若副本为n,则允许n-1节点失败)
高并发:支持数千个街护短同时读写