Kafka的操作 生产消息 消费消息
生产者就是生产一条一条的消息,然后发送到Kafka。
而发送到Kafka的过程当中需要去指定一个topic,这条消息要存储在哪个主题当中。消费者就可以从这个主题当中进行消息的消费了。
下面的脚本就是以控制台作为消息的输入源,在控制台输入弟弟每一行数据会被当做一条消息发送给Kafka存到指定的分区,指定的topic当中。
可以看到主题里面是没有任何消息在里面的,在控制台发送消息,至于消息放在哪个分区里面现在还不知道,肯定是找到其中一个分区存起来了,要么在0 1 2分区的其中一个。到底进入到哪个分区里面是由分区器来决定的。
生产者生产的消息是会被存放在log文件当中。
通过控制台可以不断的生产数据,这些数据最后都会被存放在指定的分区里面。
如果有分区没有存在,但是生产者都在往一个不存在分区里面写入数据
可以看到主题被自动的创建出来了。
当生产者生产所指定的主题不存在,那么它会自动创建。创建主题要指定分区数量和副本因子,那么如果没有指定那就1个。分区和副本都是1个。
这样测试可以使用,平时不会满足实际场景。分区数量是后期可以调整,但是副本因子改不了。
所以在启动生产者的时候好好检查指定的主题是不是存在的,是不是可用的。
上面就是通过脚本来开启了一个生产者,生产消息发送到指定的主题当中。
消费者可以从Kafka中消费指定主题当中的消息,消费者也可以写一段逻辑和程序对消息进行处理。当然也可以使用Kafka内置的脚本。这个脚本非常简单,就是将Kafka当中指定topic的数据消费,打印在控制台上面。
光标就停在这个位置了,它会不断的从Kafka当中拉取最新的数据出来。可以看到生产者生产出来的消息消费者马上就可以收到这个消息。
[apps@bin]$ ./kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic test-topic >hello > [apps@bin]$ ./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test-topic hello上面有个缺陷,消费者只能消费到当时生产者所生产的消息,但是之前生产的消息是消费不到的。
这就需要去了解一个概念offset。生产者生产出来的消息最后是存放在指定的topic中的分区当中的,好几个分区中都有很多的数据消息。每一条消息在分区当中都有都有一个唯一的序号,这就叫做offset,偏移量。
offset是一个long型的数字,有8个字节长度,offset在分区之内一定是有序的。分区之间不一定是有序的,但是在同一个分区内一定是有序的。
在图中topic有3个分区,生产者在生产消息的时候会把消息放在指定的分区里面。每个分区中都会有个编号的,在单独的分区当中,序号都是单调递增的。
所以每个消息在分区当中都有一个offset作为位置的索引,也是唯一标识。
