shell脚步向kafka发送消息_kafka相关知识及shell操作

本文介绍了如何使用Shell命令操作Kafka,包括查看topic、创建与删除topic、发送与消费消息,以及Kafka的核心组件和工作原理,如Producer、Consumer、Broker、Zookeeper等。还讨论了Kafka的数据分发策略、数据完全性保障、分区分布和消费者组的负载均衡策略。
摘要由CSDN通过智能技术生成

shell操作

1.查看当前服务器中的所有topic

bin/kafka-topics.sh --list --zookeeper mini1:2181

2.创建topic

#将消息分成三个区,每份消息一个副本

./kafka-topics.sh --create --zookeeper mini1:2181 --replication-factor 1 --partitions 3 --topic test

3.删除topic

sh bin/kafka-topics.sh --delete --zookeeper mini1:2181 --topic test

#需要server.properties中设置delete.topic.enable=true否则只是标记删除或者直接重启。

4.通过shell命令发送消息

kafka-console-producer.sh --broker-list kafka01:9092 --topic test

5.通过shell消费消息

sh bin/kafka-console-consumer.sh --zookeeper mini1:2181 --from-beginning --topic test

6.查看消费位置

sh kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper mini1:2181 --group testGroup

7.查看某个Topic的详情

sh kafka-topics.sh --topic test --describe --zookeeper mini1:2181

kafka核心组件

Topic :消息根据Topic进行归类

Producer:发送消息者

Consumer:消息接受者

broker:每个kafka实例(server)

Zookeeper:依赖集群保存meta信息。

kafka相关知识

1、kafka是什么

类JMS消息队列,结合JMS中的两种模式,可以有多个消费者主动拉取数据,在JMS中只有点对点模式才有消费者主动拉取数据。

kafka是一个生产-消费模型。

Producer:生产者,只负责数据生产,生产者的代码可以集成到任务系统中。

数据的分发策略由producer决定,默认是defaultPartition Utils.abs(key.hashCode) % numPartitions

Broker:当前服务器上的Kafka进程,俗称拉皮条。只管数据存储,不管是谁生产,不管是谁消费。

在集群中每个broker都有一个唯一brokerid,不得重复。

Topic:目标发送的目的地,这是一个逻辑上的概念,落到磁盘上是一个partition的目录。partition的目录中有多个segment组合(index,log)

一个Topic对应多个partition[0,1,2,3],一个partition对应多个segment组合。一个segment有默认的大小是1G。

每个partition可以设置多个副本(replication-factor 1),会从所有的副本中选取一个leader出来。所有读写操作都是通过leader来进行的。

特别强调,和mysql中主从有区别,mysql做主从是为了读写分离,在kafka中读写操作都是leader。

ConsumerGroup:数据消费者组,ConsumerGroup可以有多个,每个ConsumerGroup消费的数据都是一样的。

可以把多个consumer线程划分为一个组,组里面所有成员共同消费一个topic的数据,组员之间不能重复消费。

2、kafka生产数据时的分组策略

默认是defaultPartition Utils.abs(key.hashCode) % numPartitions

上文中的key是producer在发送数据时传入的,produer.send(KeyedMessage(topic,myPartitionKey,messageContent))

3、kafka如何保证数据的完全生产

ack机制:broker表示发来的数据已确认接收无误,表示数据已经保存到磁盘。

0:不等待broker返回确认消息

1:等待topic中某个partition leader保存成功的状态反馈

-1:等待topic中某个partition 所有副本都保存成功的状态反馈

4、broker如何保存数据

在理论环境下,broker按照顺序读写的机制,可以每秒保存600M的数据。主要通过pagecache机制,尽可能的利用当前物理机器上的空闲内存来做缓存。

当前topic所属的broker,必定有一个该topic的partition,partition是一个磁盘目录。partition的目录中有多个segment组合(index,log)

5、partition如何分布在不同的broker上

int i = 0

list{kafka01,kafka02,kafka03}

for(int i=0;i<5;i++){

brIndex = i%broker;

hostName = list.get(brIndex)

}

事实上这样的计算公式会使得前面几个broker分到更多的partition,压力更大。

使用以下方法:

随机选择一个broker作为partition-0的存放位置,在以此将后面的partition放在这个broker后面,循环往复。

6、consumerGroup的组员和partition之间如何做负载均衡

最好是一一对应,一个partition对应一个consumer。

如果consumer的数量过多,必然有空闲的consumer。

算法:

假如topic1,具有如下partitions: P0,P1,P2,P3

加入group中,有如下consumer: C1,C2

首先根据partition索引号对partitions排序: P0,P1,P2,P3

根据consumer.id排序: C0,C1

计算倍数: M = [P0,P1,P2,P3].size / [C0,C1].size,本例值M=2(向上取整)

然后依次分配partitions: C0 = [P0,P1],C1=[P2,P3],即Ci = [P(i * M),P((i + 1) * M -1)]

7、如何保证kafka消费者消费数据是全局有序的

伪命题

如果要全局有序的,必须保证生产有序,存储有序,消费有序。

由于生产可以做集群,存储可以分片,消费可以设置为一个consumerGroup,要保证全局有序,就需要保证每个环节都有序。

只有一个可能,就是一个生产者,一个partition,一个消费者。这种场景和大数据应用场景相悖。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值