Kafka发展史

Kafka 设计之初是为了解决 Linkedin 公司数据管道(datapipe)问题.

KafkaProducer 的工作逻辑:将消息封装成 ProducerRecord 对象,然后使用KafkaProducer.send 将消息发送出去. 事实上,其拿到消息后会通过序列化,根据本地缓存的元数据,确定目标分区,最后写入缓冲区. KafkaProducer 专门有一个 Selector I/O 线程,负责将缓存区的消息分批次发送给 Kafka broker.

新版设计优点:
1.发送过程被分成了两个线程,即:主线程和 Selector 线程.
2.发送完全是异步的,并提供回调机制,用于判断发送成功与否.
3.分批机制,每个批次中包含多个发送请求,提升整体吞吐量.
4.更加合理的分区策略,旧版对于没有指定 key 的消息,它是默认一段时间发送到一个分区,这样容易造成数据倾斜,而新版采用轮询的机制,更加合理.
5.底层统一采用 Selector,效率更高.

consumer 的优势:

1.单线程设计,单个 consumer 线程可以管理多个分区的消费 Socket 连接
2.位移提交与保存交由Kafka来处理——位移不再保存在 Zookeeper 中,而是单独保存在 Kafka 的 topic 中.

如何选择 Kafka 版本

1.如果要使用流式组件,请使用 Kafka0.10.x
2.如果要使用 Kafka Secutiry,请使用 Kafka0.9.x(含)之后的版本.

kafka 为了保证同一类型的消息顺序性(FIFO),一个partition只能被同一组的一个consumer绑定消费,不同组的consumer可以绑定同一个partition进行重复消费。但是一个consumer可以绑定多个partition(哈哈不知道这里用绑定是否合适)。

你可能感兴趣的:(Kafka)