1.解耦: 允许你独.立的扩展或修改两边的处理理过程,只要确保它们遵守同样的接.口约束。 2.冗余: 消息队列列把数据进.行行持久化直到它们已经被完全处理理,通过这.一.方式规避了了数据丢失.风险。许多消息队 列列所采.用的"插.入-获取-删除"范式中,在把.一个消息从队列列中删除之前,需要你的处理理系统明确的指出该消 息已经被处理理完毕,从.而确保你的数据被安全的保存直到你使.用完毕。 3.扩展性: 因为消息队列列解耦了了你的处理理过程,所以增.大消息.入队和处理理的频率是很容易易的,只要另外增加处理理过 程即可。 4.灵活性 & 峰值处理理能.力力: 在访问量量剧增的情况下,应.用仍然需要继续发挥作.用,但是这样的突发流量量并不不常.见。如果为以能处理理 这类峰值访问为标准来投.入资源随时待命.无疑是巨.大的浪费。使.用消息队列列能够使关键组件顶住突发的访问 压.力力,.而不不会因为突发的超负荷的请求.而完全崩溃。 5.可恢复性: 系统的.一部分组件失效时,不不会影响到整个系统。消息队列列降低了了进程间的耦合度,所以即使.一个处理理 消息的进程挂掉,加.入队列列中的消息仍然可以在系统恢复后被处理理。 6.顺序保证: 在.大多使.用场景下,数据处理理的顺序都很重要。.大部分消息队列列本来就是排序的,并且能保证数据会按 照特定的顺序来处理理。(Kafka 保证.一个 Partition 内的消息的有序性) 7.缓冲: 有助于控制和优化数据流经过系统的速度,解决.生产消息和消费消息的处理理速度不不.一致的情况。 8.异步通信: 很多时候,.用户不不想也不不需要.立即处理理消息。消息队列列提供了了异步处理理机制,允许.用户把.一个消息放.入 队列列,但并不不.立即处理理它。想向队列列中放.入多少消息就放多少,然后在需要的时候再去处理理它们。
(注意:老版本的kafka中的consumer需要连接zookeeper再消费数据,新版的kafka中consumer直接与broker进行连接,提高了效率)
1.producer: 消息⽣生产者,发布消息到 kafka 集群的终端或服务。 2.broker: kafka 集群中安装Kafka的服务器器。 3.topic: 每条发布到 kafka 集群的消息属于的类别,即 kafka 是⾯面向 topic 的(相当于数据库中的表) 4.partition: partition 是物理理上的概念,每个 topic 包含⼀一个或多个 partition。kafka 分配的单位是 partition。 5.consumer: 从 kafka 集群中消费消息的终端或服务。 6.Consumer group: high-level consumer API 中,每个 consumer 都属于⼀一个 consumer group,每条消息只能被 consumer group 中的⼀一个 Consumer 消费,但可以被多个 consumer group 消费。 7.replica: partition 的副本,保障 partition 的⾼高可⽤用。 8.leader: replica 中的⼀一个⻆角⾊色, producer 和 consumer 只跟 leader 交互。 9.follower: replica 中的⼀一个⻆角⾊色,从 leader 中复制数据。 10.zookeeper: kafka 通过 zookeeper 来存储集群的 meta 信息
总结: 1.producer: 消息⽣生产者,发布消息到 kafka 集群的终端或服务。 2.broker: kafka 集群中安装Kafka的服务器器。 3.topic: 每条发布到 kafka 集群的消息属于的类别,即 kafka 是⾯面向 topic 的(相当于数据库中的表) 4.partition: partition 是物理理上的概念,每个 topic 包含⼀一个或多个 partition。kafka 分配的单位是 partition。 5.consumer: 从 kafka 集群中消费消息的终端或服务。 6.Consumer group: high-level consumer API 中,每个 consumer 都属于⼀一个 consumer group,每条消息只能被 consumer group 中的⼀一个 Consumer 消费,但可以被多个 consumer group 消费。 7.replica: partition 的副本,保障 partition 的⾼高可⽤用。 8.leader: replica 中的⼀一个⻆角⾊色, producer 和 consumer 只跟 leader 交互。 9.follower: replica 中的⼀一个⻆角⾊色,从 leader 中复制数据。 10.zookeeper: kafka 通过 zookeeper 来存储集群的 meta 信息
一个broker上可能存在多个topic,而一个topic会有多个partition分区,一个topic的一个分区会有多个副本存在不同的broker上,同一个分区的多个副本分为leader和follower,leader是活跃分区,follower分区从leader活跃分区中复制数据。
1.Kafka的⽣生成者直接向Broker的Leader分区写⼊入数据,不不需要连接ZK 2.Kafka的消费者(⽼老老的API需要先连接ZK,获取Broker信息和topic、分区偏移量量信息),新的API不不需要 连接ZK(直连⽅方式,效率更更⾼高)
安装zookeeper集群和kafka集群,因为kafka要依赖于zookeeper
/bigdata/zookeeper-3.4.13/bin/zkServer.sh start /bigdata/zookeeper-3.4.13/bin/zkServer.sh status
/bigdata/kafka_2.12-2.4.1/bin/kafka-server-start.sh -daemon /bigdata/kafka_2.12- 2.4.1/config/server.properties
jps
/bigdata/kafka_2.12-2.4.1/bin/kafka-topics.sh --list --zookeeper localhost:2181
/bigdata/kafka_2.12-2.4.1/bin/kafka-topics.sh --zookeeper localhost:2181 --create – topic wordcount --replication-factor 3 --partitions 3
/bigdata/kafka_2.12-2.4.1/bin/kafka-console-producer.sh --broker-list node- 1.51doit.cn:9092,node-2.51doit.cn:9092,node-3.51doit.cn:9092 --topic wordcount
/bigdata/kafka_2.12-2.4.1/bin/kafka-console-consumer.sh --bootstrap-server node- 1.51doit.cn:9092,node-2.51doit.cn:9092,node-3.51doit.cn:9092 --topic wordcount --from beginning
–from-beginning 消费以前产⽣生的所有数据,如果不不加,就是消费消费者启动后产⽣生的数据
/bigdata/kafka_2.12-2.4.1/bin/kafka-topics.sh --delete --topic wordcount --zookeeper localhost:2181
/bigdata/kafka_2.12-2.4.1/bin/kafka-topics.sh --zookeeper localhost:2181 --describe – topic wordcount
/bigdata/kafka_2.12-2.4.1/bin/kafka-console-consumer.sh --topic __consumer_offsets – bootstrap-server node-1.51doit.cn:9092,node-2.51doit.cn:9092,node-3.51doit.cn:9092 – formatter “kafka.coordinator.group.GroupMetadataManager$OffsetsMessageFormatter” – consumer.config /bigdata/kafka_2.12-2.4.1/config/consumer.properties --from-beginning