Kafka是一款消息引擎系统,也是分布式流处理平台。
顺便说下,作为消息引擎系统Kafka的对手有Pulsar,分布式流处理平台有Flink,略强于kafka。
很多人说kafka和传统mq到底有什么区别?太具体的请自行度娘,这里讲几点:
1. 从宏观角度讲,传统mq是消息队列,kafka是消息引擎系统和流处理平台,前者小而全,后者大,有些方面考虑的没那么全,比如支持协议,rabbitMQ支持的很多(有AMQP,MQTT),比如支持复杂的consumer routing,kafka在这些方面就没有mq好。
2. kafka消费者读取消息是可以重演的,消息基于日志结构的,消费者仅读取数据,不会删除消息数据。而rabbitmq和activemq,一旦消息被成功处理,就会从broker上删除。
3. 如果你系统需要较高的吞吐量,消息处理时间很短,并且关心消息的顺序,就考虑用kafka;
而如果消息处理逻辑非常复杂,处理代价很高,同时不关心消息之间的顺序,建议用传统的MQ。
4. 既然是消息引擎系统,kafka在高可用,高性能,扩展性方面就非常的出色,从下文中“kafka术语”就可以略知一二。
一、kafka种类
包含Apache Kafka,Confluent Kafka,CDH/HDP Kafka。
一般建议是选择社区版 Kafka,即Apache Kafka,优势是迭代速度快,社区丰富,缺点是高级组件较少,你可以结合其他组件一起使用,比如:kafka streams,connect,manager。
二、kafka作为消息引擎系统,最重要的作用是削峰填谷。
三、kafka消息传输格式是二进制的字节序列;传输模式有点对点模型和发布/订阅模型,点对点一般说的就是传统的消息队列;通信协议都是基于TCP的,可能主要原因是:可保障消息的可靠性传输,自动重传丢失的报文。
四:kafka术语:
Broker:kafka服务实例,一个kafka集群包含多个broker,一般一台机器部署一个broker。
Record:消息,kafka处理的对象
Topic: 主题,具体的业务,某业务类型的Record集合
Partition: 分区,一个topic可以有很多partition,在磁盘上以log体现,采用顺序追加log的方式添加record 。
Offset:消息位移,分区中消息的位置信息,是个单调递增的值。
Producer:生产者,往topic发布消息的应用程序(客户端)
Consumer:消费者,从topic订阅消息的应用程序(客户端)
Consumer group:消费者组,包含多个消费者,同时消费多个partition提高吞吐量
每个consumer属于一个特定的consumer group。同一topic的一条消息只能被同一个consumer group内的一个consumer消费,
但多个consumer group可同时消费这一消息。
Replica:副本,kafka中同一消息被copy到多个地方以提供数据冗余,实现高可用。replica分leader replica和follower replica,
leader replica负责读写请求,follower replica只是同步leader replica消息,通过replica选举机制实现故障转移。
Rebalance:重平衡,consumer group内某个consumer 实例挂掉后,其它consumer实例会自动重新分配订阅topic partition,实现consumer端高可用。
Coordinator:协调者,Rebalance重平衡就依赖此组件。