kafka一些基础
kafka里面的一些概念
broker kafka集群中的实例
topic kafka中一类消息的集合
partition 物理概念,topic可以存储在一个或者多个partition中,每一个partition包含一个文件夹,其中有索引文件和日志文件。
producer 产生消息的程序
consumer 消费者,可以设置consumer group,一个消息只能被一个group中的一个consumer消费,但是可以被不同group消费。
消息的生产和消费
采用pull模式,消费者自行决定消费的速度。消费者可以通过修改offset,来重复消费消息。好处是防止消费者消费能力不足造成的阻塞。
partition的使用使得topic的存储得到水平扩展,同一个topic的不同消息,按照一定的规律,分配到不同的partition中,提高了吞吐量。消息可以携带一个key,这个key结合相应的分区策略,尽量保证比较分散。partition的删除策略,可以是时间多久后删除,也可以是大小达到多少后删除。partition的索引文件是稀疏的索引,减少磁盘占用。
Replication 副本机制
副本就是消息存多份,增加follower。作为leader的机器会维护一个同步列表,in sync replication,isr。在一些配置下面,只有isr中的机器才能成为leader。
producer消息发出后有几种不同的方式确认消息的提交,ack=1,ack=0,ack=all,其中ack=1时候,leader确认保存了消息就可以了。ack=0,不需要回复,发送了就行。ack=all,表示isr中所有的节点有复制了消息才算发送成功。
leader选举
常见的分布式系统中,一般是2n+1台机器,最多允许n+1台挂掉,会在其余的机器中选出leader。kafka是从isr中选举leader的,宕机发生时候,只要有一台机器就能保证消息不丢失。
如果机器都挂了,有两种选择,一种是等第一个isr机器恢复,一种是等第一台机器恢复,都可以看需求来定,有的是可以接受消息丢失的,比如不是很重要的通知短信,有的就是这么做的,保证高可用性,牺牲一点一致性。
待续。。。