介绍:
Kafka是一种高吞吐量的分布式发布-订阅消息系统,使用Scala+Java编写的
Kafka集群通过集群的方式提供服务,通过O(1)的磁盘数据结构提供消息的持久化,保证系统的可用性和扩展性
主要的应用常见如下:
1:Messaging 作为常规的消息系统
2:Websit activity tracking kafka可以作为"网站活性跟踪"的最佳工具;可以将网页/用户操作等信息发送到kafka中.并实时监控或者离线统计分析等
3:Log Aggregation kafka还可以作为"日志收集中心"。应用程序(Tomcat,Nginx,JAVA日志等)可以将操作日志"批量""异步"的发送到kafka集群中,而不是保存在本地或者DB中;kafka可以批量提交消息/压缩消息等,这对producer端而言,几乎感觉不到性能的开支.此时consumer端可以使hadoop,ELK等其他系统化的存储日志并进行分析。
名词解释:
- Broker:kafka集群由一个或多个Broker组成。
- Topic:这是一个逻辑概念。kafka对消息保存时根据Topic进行归类。
- Partition:通常称之为“分区”,这是一个物理概念。每个topic将被分成一到多个partition(分区),每个partition在存储层面就是一个append log文件,通常以000000000000000000XX.log命名。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。
- offset:通常称为“偏移量”,任何发布到Partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它可以唯一标记一条消息。
- Producer:生产者。Producer将消息发布到指定的Topic,也可以指定Partition。
- Consumer:消费者。Consumer采用pull的形式从Producer拉取消息。
- Consumer Group:通常称之为“消费组”,每个 consumer 都属于一个特定的 consumer group(若不指定 group name 则kafka会给一个默认的group name)。一个 topic可以有多个consumer group,topic的消息会分发到所有的Consumer Group,但每个consumer group只会把消息发给该consumer group中的一个 consumer。如果所有的consumer都具有相同的group, 即单播,消息将会在consumers之间负载均衡;如果所有的consumer都具有不同的group,那这就是"发布-订阅",每条消息将会广播给所有的consumer。
- Replication:备份机制,每个分区partition都有自己的镜像分区来保证高可用,该分区和备份分区不在同一台物理机上。
- Controller:kafka集群控制器,主要作用有:选举每一个topic的Leader和ISR;同步元数据信息包括broker和分区的元数据信息;broker增删监听与处理;topic变化监听与处理;分区变化监听与变化处理; broker优雅退出等。
总结:一个kafka集群是由多个Broker组成
一个Producer产生的消息会归类到一个Topic中
一个Topic会有多个Partition并分布在不同的Broker中
一个Consumer可以消费多个Producer的消息,但是一个Partition的消息只能被一个Consumer消费
拓扑图:
作者:慕菲烟云 欢迎转载,与人分享是进步的源泉!