kafka从入门到。。。(持续更新)

192 阅读2分钟

[TOC] 在看kafka之前想到的一部分问题,并由此去学习kafka,如果有同学看的哪些问题解释的有问题或不够清楚,欢迎留言,有其他问题也可以一起讨论

  1. 基础架构
  2. 存储结构
  3. HA(主从复制,选举)
  4. 批量发送 和 零拷贝
  5. zk在kafka中的角色和作用
  6. 丢消息,消息重复
  7. kafka的序列化Avro
  8. 消费者重平衡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

分区的所有权从一个消费者转移到另一个转移者