kafka从入门到实战(一)

1,539 阅读4分钟

理论

1. kafka是什么?

Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。

2. 为什么要使用kafka

分布式消息服务器,使用场景无非三种

  • 缓冲和削峰
    • 上游数据时有突发流量,下游可能扛不住,或者是下游没有足够的机器去处理数据请求,会导致服务器坍塌.此时消息服务,可以在其中承担缓冲作用,将消息请求缓存在kafka中,下游的服务再在可以承担压力的情况下慢慢消费.
  • 解耦
    • A系统发送数据到BCD三个系统, A通过接口发送数据,当新增E系统我们需要新增相应的接口去处理E系统,中途如果去掉B系统,还得手动去掉对应接口.引入消息服务,可以A将消息发送到kafka然后谁需要,自己去消息服务订阅消费即可

image.png

  • 异步
    • 当A系统分布要往BCD三个服务数据库写入数据,这是A需要调用BCD三个服务,并分别写入数据再返回给A系统处理结果,由于是同步执行的,用户这边需要等待一段时间才会有返回结果,此时的对用户而言很不友好,如果直接将写数据的操作放到消息服务器,不管后续操作情况.这是对用户而言操作是瞬间的,显然可用性 极高

image.png

3. kafka和其它MQ的区别

优点:

  • 可扩展。Kafka集群可以透明的扩展,增加新的服务器进集群。
  • 高性能。Kafka性能远超过传统的ActiveMQ、RabbitMQ等,Kafka支持Batch操作。
  • 容错性。Kafka每个Partition数据会复制到几台服务器,当某个Broker失效时,Zookeeper将通知生产者和消费者从而使用其他的Broker

部署安装

安装环境 Linux 系统 Centos7.6

1. 包下载

进入服务器指定文件夹目录,根据个人喜欢指定.我这边是/usr/local/,

  1. cd /usr/local/ 进入指定目录
  2. 下载包 wget https://repo.huaweicloud.com/apache/kafka/2.2.2/kafka_2.11-2.2.2.tgz
  3. 解压 tar -xvf kafka_2.11-2.2.2.tgz
  4. 重名名 mv kafka_2.11-2.2.2 kafka

2. 部署准备

  1. kafka是基于分布式消息管理,因此需要一个媒介对kafkaBroker进去管理,zookeeper是一款高效的分布式管理工具,所以使用kafka之前需要先搭建zkzookeeper安装部署参考往期博客

  2. 修改kafka的配置文件

  • 进入指定目录 cd /usr/local/kafka
  • 修改配置vi config/server.properties

注意需要修改的地方如下

listeners=PLAINTEXT://:9092
# 改服务器的ip 
advertised.listeners=PLAINTEXT://192.168.10.126:9092
# 日志文件夹  可以修改也可以默认不变
log.dirs=/tmp/kafka-logs
# 定义分区数 默认为1
num.partitions=4
# zk的所有节点 如果是集群是多个节点 单机是一个节点  
zookeeper.connect=192.168.10.122:2181
  1. 启动kafka服务,窗口启动和后台挂起启动,建议初次启动窗口启动方便查看日志是否启动成功 ./bin/kafka-server-start.sh ./config/server.properties ,指定配置文件启动

正常启动成功如下所示

image.png

使用ctrl+c关闭当前服务,使用后台启动方式
nohup ./bin/kafka-server-start.sh ./config/server.properties &

然后使用命令ps -ef | grep kafka查看是否启动成功,成功如下所示

image.png

3. 相关操作命令

  1. 查看当前服务中所有的 topic
./bin/kafka-topics.sh --zookeeper [服务名或ip]192.168.10.122:2181 --list
  1. 创建topic 指定名称为test分区数为4副本数为2
./bin/kafka-topics.sh --zookeeper 192.168.10.122:2181 --create --replication-factor 2 --partitions 3 --topic test
  1. 删除topic注意:删除topic的时候需要在server.properties中设置delete.topic.enable=true否则只是标记删除,并没有真正删除。
./bin/kafka-topics.sh --zookeeper 192.168.10.122:2181  \
--delete --topic test
  1. 查看topic详情
bin/kafka-topics.sh --zookeeper 192.168.10.122:2181  \
--describe --topic first

image.png 5. 发送消息

./bin/kafka-console-producer.sh \
--broker-list 192.168.10.122:9092 --topic test
# 如果创建kafka是集群启动的话 --broler-list 后面的多个地址使用,拼接
# 输入完上面的命令成功后会有">"标志,就可以输入数据了
# 输入数据,需要删除的时候按住ctrl 在点击backspace就可以删除了。
>hello world

  1. 消费消息
# --from-beginning  从头开始消费所有信息
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.10.122:9092 --from-beginning --topic test

image.png

  1. 修改分区,由于kafaka内部数据处理过于复制,目前只有增加分区操作 没有减少分区功能
 ./bin/kafka-topics.sh --zookeeper 192.168.10.122:2181 --alter --topic test --partitions 6 

kafka在java中实战(请见下期)

博客参考csdn大佬 blog.csdn.net/qq_26803795…