[TOC] 在看kafka之前想到的一部分问题,并由此去学习kafka,如果有同学看的哪些问题解释的有问题或不够清楚,欢迎留言,有其他问题也可以一起讨论
- 基础架构
- 存储结构
- HA(主从复制,选举)
- 批量发送 和 零拷贝
- zk在kafka中的角色和作用
- 丢消息,消息重复
- kafka的序列化Avro
- 消费者重平衡rebalance
在网上可以找到很多相关知识
1. 基本概念(第一步要把基础的架构搞清楚,到底消息在kafka中是如何流动的)
producer, message, broker, topic, partition, replication, consumer group, consumer
producer:消息生成者,
broker:
topic(逻辑)分成多个partition(物理),partition在存储上又分为多个segment(index,log)
replication是partition的副本
consumer group中包含多个consumer,一个consumer
group消费一个topic,partition不能被同一个group下的不同consumer消费;
不同consumer group之间消费互不影响。
4. 批量发送/接受
当多个消息被发送到同一个分区,会将他们放到一个batch里。(会增加延迟,但是也会提升吞吐)
producer的配置:batch.size(设置的大也不会造成延迟)和linger.ms
consumer的配置:fetch.min.bytes 和 fetch.max.wait.ms
5. zk作用(kafka权威指南Ch.5)
zk用来保存broker、主题和分区的元信息
最好一个kafka集群使用一个zk集群,共享的zk可能会引起延迟和超时,很容易导致kafka多个broker离线
6. 丢消息(生产者,kafka,消费者三个方面)
producer端 的 acks:0(吞吐高,但是不安全),1,all(安全,但是吞吐低)
consumer端通过是否自动提交偏移量来保证,在消费完成后再由自己控制何时提交偏移量:enable.auto.commit=false(用户处理时间过长没有commit,导致吞吐降低-异步提交)
7. Avro
avro数据文件中包含整个schema;
负责写消息的schema变化时,负责读的可以继续处理消息无需改动;
kafka中avro的使用,将schema放在配置中心,只有一个schema的id,读写两段通过id到注册表中找到对应的schema
8. rebalance
分区的所有权从一个消费者转移到另一个转移者