在Kafka环境搭建中详细的介绍了Kafka的环境搭建,接下来主要演示Kafka的基本应用和Kafka中常用的概念。
在Kafka中,kafka-topic.sh可以用来管理主题,包含了主题的创建,查看,修改和删除。Kafka中的数据最终是需要做持久化的处理,但是这些数据不是单一的业务数据,所以需要在做持久化的时候来区分各个不同业务数据,比如在数据库里面,就会有数据库和表的分类模式,基于Kafka的业务数据,也就有了“主题”概念,简单理解就是把不同类型的业务消息数据按照一定的规则进行分类,最后把相同类型的业务数据存储到同一个主题中。如交易业务数据,那么就会有充值记录,消费记录,但是都可以存储到交易的主题中。刚才谈到主题,那么首先来看在kafka中主题的管理操作,如下显示查看kafka已有的主题命令:
kafka-topics.sh --list --zookeeper localhost:2181
在如上截图中可以看到具体的主题列表,下面再来演示创建主题,比如创建主题pay,该主题拥有一个副本和2个分区,具体创建命令以及过程如下所示:
kafka-topics.sh --create --zookeeper localhost:2181
--replication-factor 1 --partitions 2 --topic pay
Created topic pay.
再次查看已有的主题信息:
kafka-topics.sh --list --zookeeper localhost:2181
__consumer_offsets
ip_login
login
pay
test
可以看到在主题列表中新增了“pay”的主题。主题创建成功后,连接ZK的服务端就可以看到创建的主题元数据信息,具体如下所示:
#查看主题"pay"的分区数
[zk: localhost:2181(CONNECTED) 1] ls /brokers/topics/pay/partitions
[0, 1]
#查看主题"pay"的分区元数据信息
[zk: localhost:2181(CONNECTED) 2] get /brokers/topics/pay
{"version":2,"partitions":{"1":[0],"0":[0]},"adding_replicas":{},"removing_replicas":{}}
使用命令--descripe可以查看主题的分区以及副本,如查看主题“pay”的分区以及副本信息,具体如下:
kafka-topics.sh --describe --zookeeper localhost:2181 --topic pay
Topic: pay PartitionCount: 2 ReplicationFactor: 1 Configs:
Topic: pay Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: pay Partition: 1 Leader: 0 Replicas: 0 Isr: 0
刚才创建主题的过程中看到说到分区和副本,这里详细的解释下什么是分区,什么是副本。Kafka作为生产者消费者模式的MQ中间件,客户端在调用生产者接口的时候,需要关心的是把数据给那个主题,而作为消费端来说,关心的也是消费(订阅)那个主题的数据,过程中并不关心这个数据它是存储在Kafka集群的那个代理节点上。但是如果所有的数据都在一个代理节点上,这个代理节点就会存在IO的瓶颈,严重影响到它的IO的吞吐量,也无法实现水平扩展,而分区的引入就可以很好的解决了水平扩展的问题,具体来说就是每个主题上的分区可以理解为是一个数组,新来的消息数据可以有序的追加到该数组上,这样每个分区就都会有一个文件夹,而一个代理节点可以存放多个分区。这样生产者可以把消息数据发送到多个代理节点上的多个分区,而消费者也可以从多个代理节点上的不同分区获取数据,从而实现水平扩展。副本主要解决的是在高可用的情况下数据依然是准确的,这样一个主题拥有了多个副本可以解决防止主题的数据丢失的风险。后面可以持续演示基于新创建的主题生产者和消费者的模式。
感谢您的阅读,后续会持续更新中间件的技术栈!