Kafka简介, Kafka和RabbitMQ区别
kafka基本原理概述——patition与replication分配 - 新际航 - 博客园
Kafka专用术语:
-
Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。Broker的leader叫Kafka Controller会负责leader选举和zookeeper交互。
-
Topic:topic是一个逻辑上的概念, 指一类消息,Kafka集群能够同时负责多个topic的分发. 一个topic可以有多个分区 partitions. 如果一个Topic配置了复制因子( replication facto)为N, 那么可以最多允许N-1服务器当掉而不丢失任何已经增加的消息
-
Partition:topic 物理磁盘上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。kafka和单机的消息队列系统的区别就体现在这里, 一个topic的消息可以水平扩展到多个partitions上, 这多个partitions在多台节点上, 充分利用多台节点的IO能力, 而传统的单机的消息队列的瓶颈就在于只有一台服务器, 这台服务器的IO成为消息读写速度的瓶颈. kafka保证在一个partition内的消息有序, FIFO. kafka中的topic为什么要进行分区? - 知乎
-
Partition Replica:每个Partition都有leader和follower。leader负责写入消息,同时负责向消费组传输消息。follower则部分利用fetcher线程从leader同步消息,以防leader挂掉。
-
Segment:partition物理上由多个segment组成。
-
Offset(偏移):每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息. Kafka 无法做到一个topic全局有序, 但是能做到一个分区内的消息有序. (kafka分布式的情况下,如何保证消息的顺序? - 知乎). 如果要做到topic内全局有序, 可以考虑使用乐观锁的一些方案, 比如时间戳.
-
ISR:未超时的Partition同步副本的队列,即In-sync Replica。
-
Kafka Controller:kafka broker的leader,负责各个partition的leader选举,保有replica同步的情况数据。
Partition & Group
1个partition只能被同组的一个consumer消费,同组的consumer则起到均衡效果。
换而言之,1个partition如果被多个consumer消费,那这几个consumer必定属于不同组。
KafkaController介绍_happy19870612's blog-CSDN博客
Kafka Controller
Kafka 代码详解
kafka调优技巧:
- Producer 端: 增加 batch.size、linger.ms,启用压缩,关闭重试等。(让消息生产者打包批量地发送消息,batch.size即最小batch的大小。linger.ms的时间限制,达到linger.ms后,batch.size没有达到也要发送消息。)
- Broker 端: 增加 num.replica.fetchers,提升 Follower 同步 TPS,避免 Broker Full GC 等。(fetcher是副本同步线程的名字。)
- Consumer: 增加 fetch.min.bytes 等。 (消费者批量同步消息的最小字节数。)
Kafka 自2.8版本后不再需要Zookeeper维护一致性:
Kafka 不再需要 ZooKeeper - 性能与架构 - 博客园
以下内容为转者(rav009)原创:
What is the difference between Kafka and RabbitMQ?
Horizontal Scalablity:
Kafka will seperate a topic into several partitions. Each partition will be processed on a certain server. While RabbitMQ has a master queue and mirror queues, the mirror queue will be used only when the master queue failed. So this is a HA. The performance of RabbitMQ is determined by the spec of the server where the master queue locates in.
Routing Rules & Subscription:
RabbitMQ supports complicated routing rules to delivery the messages. While kafka uses subscription mechinism.