工作流程:
如图所示哈,整个工作环境包括:
一个生产者(producer),
一个消费者组(含有三个消费者),
一个主题:A,
三个节点(broker),
三个分区(partition),
两个副本(副本数=leader数+follower数)。
大致流程:
kafka中的消息都是面向topic进行分类,生产消息、消费消息都是面向topic。
1、首先producer从集群中选择一个分区(可分配、可随机)的leader,然后producer将消息发送到leader;
2、leader接收到消息,将消息写入到本地文件;
topic是逻辑的概念,而partition是物理上的概念,每个partition都有自己的对应的log文件,该log文件存储就是producer生产的数据。
producer生产的数据会被不断地追加到该log文件末端(log文件太大时会被切分),且每条数据都有自己的offset。
3、follower要主动从leader同步数据;
4、followers将消息写入完成,通知leader发送ack(acknowledgement 确认收到);
5、leader收到followers的ack后,向producer发送ack;
6、消费者组中的每个消费者,都会实时记录自己消费的offset,消费消息;如果出错复活后,从上次的位置继续消费。
图中所示,每个分区中都有消息的编号,成为偏移量(offset),他的作用是可以让消费者追踪消息在分区里的位置。
注意:偏移量不是全局的,是分区独立使用的。
因此,kafka只保证分区内消息的有序(生产顺序和消费顺序相同)
流程图:
疑问:
1、leader和follower的关系变化?怎么选leader?如果出问题怎么处理?
2、文件怎么存储?文件结构?
3、具体同步策略?
4、分区有什么用?
标签:log,producer,流程,kafka,工作,消息,leader,分区 From: https://www.cnblogs.com/zmjc/p/18094053