kafka學習筆記

2022-09-10 21:27:47 字數 3932 閱讀 2600

一,kafka概述

kafka是乙個高吞吐量的、永續性的、分布式發布/訂閱訊息系統。

它主要用於處理活躍的資料(登入、瀏覽、點選、分享、喜歡等使用者行為產生的資料)。

在流式計算中,kafka一般用來快取資料,storm通過消費kafka的資料進行計算。

kafka是乙個分布式訊息佇列:生產者、消費者的功能。它提供了類似於jms的特性,但是在設計實現上完全不同,此外它並不是jms規範的實現。

kafka對訊息儲存時根據topic進行歸類,傳送訊息者稱為producer,訊息接受者稱為consumer,此外kafka集群有多個kafka例項組成,每個例項(server)成為broker--伺服器節點。

無論是kafka集群,還是producer和consumer都依賴於zookeeper集群儲存一些meta資訊,來保證系統可用性

三大特點:

高吞吐量:可以滿足每秒百萬級別訊息的生產和消費——生產消費。需要硬體支撐

永續性:有一套完善的訊息儲存機制,確保資料的高效安全的持久化——中間儲存。

分布式:基於分布式的擴充套件和容錯機制;kafka的資料都會複製到幾台伺服器上。當某一台故障失效時,生產者和消費者轉而使用其它的機器——整體健壯性。

二,kafka核心元件

topic: kafka處理的訊息的不同分類。

broker:訊息**,kafka集群中的乙個kafka服務節點稱為乙個broker,主要儲存訊息資料

。存在硬碟中。每個topic都是有分割槽的。

partition:topic物理上的分組,乙個topic在broker中被分為1個或者多個partition,分割槽在建立topic的時候指定。 

producer:訊息和資料的生產者,向kafka的乙個topic發布訊息。 

consumer:訊息和資料的消費者,定於topic並處理其發布的訊息。 

zookeeper:協調kafka的正常執行。

三,kafka集群部署

2,修改配置檔案。

//全域性唯一編號,不能重複

broker.id=0

//監聽連線的埠,producer或consumer將在此埠建立連線

port=9092

socket.send.buffer.bytes=102400

socket.receive.buffer.bytes=102400

socket.request.max.bytes=104857600

ocket.send.buffer.bytes=102400

log.dirs=/home/kafka-logs

num.partitions=2

zookeeper.connect=localhost:2181

zookeeper.connection.timeout.ms=6000

3,分發安裝包

scp -r /export/servers/kafka_2.11-0.8.2.2 kafka02:/export/servers

然後分別在各機器上建立軟連

cd /export/servers/

ln -s kafka_2.11-0.8.2.2 kafka

4,再次修改配置檔案

依次修改各伺服器上配置檔案的的broker.id,分別是0,1,2不得重複。

5,啟動集群

依次在各節點上啟動kafka

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

四,kafka常用操作的命令

檢視當前伺服器中的所有topic

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

建立topic

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

replication-factor 備份個數

刪除topic,慎用,只會刪除zookeeper中的元資料,訊息檔案須手動刪除

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

需要server.properties中設定delete.topic.enable=true否則只是標記刪除或者直接重啟。

通過shell命令傳送訊息

kafka-console-producer.sh --broker-list server1:9092 --topic t

通過shell消費訊息

sh bin/kafka-console-consumer.sh --zookeeper server1:2181 --from-beginning --topic t

檢視消費位置

sh kafka-run-class.sh kafka.tools.consumeroffsetchecker --zookeeper zk01:2181 --group testgroup

檢視某個topic的詳情

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

五,通過j**a呼叫kafka

1,priduce**

package com;

import j**a.util.properties;

import j**a.util.scanner;

import org.apache.kafka.clients.producer.callback;

import org.apache.kafka.clients.producer.kafkaproducer;

import org.apache.kafka.clients.producer.producerconfig;

import org.apache.kafka.clients.producer.producerrecord;

import org.apache.kafka.clients.producer.recordmetadata;

import org.apache.kafka.common.serialization.stringserializer;

/** * 模擬生產者傳送訊息,通過迴圈去傳送訊息給kafka

* **/public class producer

});num++; }}

}

2,consumer**

package com;

import j**a.util.collections;

import j**a.util.properties;

import org.apache.kafka.clients.consumer.consumerconfig;

import org.apache.kafka.clients.consumer.consumerrecord;

import org.apache.kafka.clients.consumer.consumerrecords;

import org.apache.kafka.clients.consumer.kafkaconsumer;

import org.apache.kafka.common.serialization.stringdeserializer;

/**kafka-topics.sh --list --zookeeper server1:2181

* **/public class consumer }}}

注意:**中的topic 要在linux虛擬機器中的存在,若沒有則建立。

學習筆記 Kafka

kafka kafka把資料往磁碟上寫,但是在磁碟上存它的讀寫速度比記憶體快,這個依賴於預讀和後寫功能,但是這個預讀和後寫必須是按照順序的方式,若沒有順序的方式優化的話,不存在什麼預讀和後寫。特點 訊息持久化 能落到磁碟 通過o 1 的磁碟資料結構提供資料的持久化 高吞吐量 分布式 擴充套件能力強 ...

Kafka學習筆記

1.1簡介 apache kafka 是分布式發布 訂閱訊息系統 訊息中介軟體 它最初由 linkedin 公司開發,之後成為 apache 專案的一部分。kafka 是一種快速 可擴充套件的 設計內在就是分布式的,分割槽的和可複製的提交日誌服務。apache kafka 與傳統訊息系統相比,有以下...

kafka學習筆記

1.1 kafka的特性 controller在zookeeper註冊watch zookeeper管理kakfabroker集群。所有的kafkabroker節點一起去zookeeper上註冊乙個臨時節點,只有乙個能成功,成功註冊的節點稱之為 kafkabrokercontroller,其餘的稱之...