Kafka

Kafka是一个高吞吐、低延迟的分布式消息系统,最初由LinkedIn开发,现为Apache顶级项目。它支持分区和多副本,适用于日志收集、消息系统、用户活动跟踪、运营指标和流式处理等场景。Kafka的特点包括持久性、可靠性、容错性和高并发能力,通常配合Zookeeper使用。在使用Kafka时,需要先启动Zookeeper,然后配置并启动Broker,创建Topic,再通过Producer和Consumer进行消息的生产和消费。
摘要由CSDN通过智能技术生成

Kafka:
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
1.1 Kafka的特性:

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。
  • 可扩展性:kafka集群支持热扩展
  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
  • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
  • 高并发:支持数千个客户端同时读写
  • 1.2 Kafka的使用场景:
  • 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
  • 消息系统:解耦和生产者和消费者、缓存消息等。
  • 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
  • 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
  • 流式处理:比如spark streaming和storm
  • 事件源

在使用kafka之前首先启动zookeeper和配置kafka的broker (相当于经纪人)和ip地址
在这里插入图片描述
1

bin/zookeeper-server-start.sh config/zookeeper.properties

发现这是一个前台的 我们在启动配置的server2 (这是server.server.properties复制出来配置的)

bin/kafka-server-start.sh config/server2.properties

然后我们就可以看到我们启动的broker的id了
在这里插入图片描述

启动完成后我们就可以做一个启动卡,用来连接发消息,创建一个topic
3.

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

主题创建已成功
在这里插入图片描述

4.我们在到zookeeper里面看一下我们创建的topic

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

在这里插入图片描述

5.下面我们在启动一个生产者 producer “直播间” 我们现在这里面说两句话

bin/kafka-console-producer.sh --broker-list 192.168.184.124:9092 --topic test

在这里插入图片描述

6.在启动一个消费者consumer (观看者) 这样我们就能看到直播间说的话了

bin/kafka-console-consumer.sh --bootstrap-server 192.168.184.124:9092 --topic test --from-beginning

在这里插入图片描述

7.在启动一个消费者 同上面一个比较 去掉beginning 是看不到之前的未读信息的

bin/kafka-console-consumer.sh --bootstrap-server 192.168.184.124:9092 --topic test

在这里插入图片描述

API使用:使用api发送消息 先导入kafka-clients

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>2.1.0</version>
</dependency>
object MyKafkaProducer extends App {
  val props = new Properties()
  props.put("bootstrap.servers","192.168.184.124:9092")
  props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
  props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
  val producer = new KafkaProducer[String,String](props);
  var i = 0L;
  while (true){
    println(i)
    val pr = new ProducerRecord[String,String]("test",i.toString);
    producer.send(pr);
    Thread.sleep(300)
    i+=1;
    }

然后我们就可以看到数据了
在这里插入图片描述
在这里插入图片描述

API收取信息

object KafkaConsumer extends App {
  val props = new util.HashMap[String,Object]();
  props.put("bootstrap.servers","192.168.184.124:9092");
  props.put("group.id", "test");
  props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
  props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
  val consumer = new KafkaConsumer[String,String](props);
  consumer.subscribe(util.Arrays.asList("test"))
  while(true){
    val rs:ConsumerRecords[String,String] = consumer.poll(Duration.ofMillis(1000))
    val it = rs.iterator()
    while(it.hasNext){
      println(it.next())
    }
  }

一边kafkaProducer生产,另一边kafkaConsumer就可以收到信息了
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值