Kafka 安裝教程和基本操作

一、簡介

Kafka 是最初由 Linkedin 公司開發,是一個分布式、分區的、多副本的、多訂閱者,基于 zookeeper 協調的分布式日志系統(也可以當做 MQ 系統),常見可以用于 web/nginx 日志、訪問日志,消息服務等等,Linkedin于2010年12月貢獻給了 Apache基金會 并成為頂級開源項目。

應用特性

  • 分布式存儲:數據被自動分區并分布在集群的節點中。
  • 消息有序性Kafka 能確保從生產者傳到消費者的記錄都是有序的。
  • 高容錯性:允許集群中節點失敗(若副本數量為n,則允許n-1個節點失敗)。
  • 高吞吐量Kafka 支持單機每秒至少處理10萬以上消息,通常可以達到數百萬條消息。
  • 易擴展性:支持集群熱擴展。
  • 高并發:支持數千個客戶端同時讀寫。
  • 持久性:支持消息數據持久化到本地磁盤 并支持數據備份和靈活配置數據的持久化時間。
  • 實時處理/低延遲:在數據寫入的同時對進行處理,消息延遲最低只有幾毫秒。

應用場景

Kafka 本質是 支持分布式的消息系統/消息中間件 。分析 Kafka 的應用場景等同于分析 消息中級件 的應用場景。通常,使用 消息系統 的 發布/訂閱模型 功能來連接 生產者消費者。實現以下三大功能:

  • 生產者和消費者的解耦
  • 消息持久化 / 消息冗余
  • 消息緩沖 / 流量消峰

具體應用場景有:

  • 日志收集或數據管道:作為日志收集系統或數據處理管道的一部分,以處理大量的日志數據或實時數據流。
  • 負載均衡:如果系統收到大量請求或數據流,可以使用消息隊列把這些任務平均分配給多個處理器或服務,從而實現負載均衡。
  • 系統解耦:消息隊列經常用作不同服務間的通信機制,以解耦系統的不同部分。
  • 分布式事務:如果一個事務需要跨多個服務進行,可以使用消息隊列來協調不同服務之間的通信,確保事務的原子性。
  • 實時流數據處理:比如實時日志分析或者實時數據報警。Kafka 能接收實時數據流并保證它的可靠性和持久性,這樣就可以在上游源源不斷生產數據的同時,下游可以實時地進行分析。
  • 通知和實時更新:消息隊列可以用作通知的中介,比如告知用戶完成某個任務,或者在后端數據更新時實時通知前端。

設計目標

  • 高性能:以時間復雜度為O(1)的方式提供消息持久化能力,即使對TB級以上數據也能保證常數時間的訪問性能。
  • 高吞吐率:即使在非常廉價的商用機器上也能做到單機支持每秒100K條消息的傳輸。
  • 消息系統:支持Kafka Server間的消息分區,及分布式消費,同時保證每個partition內的消息順序傳輸。
  • 橫向擴展:支持在線水平熱擴展

二、kafka安裝和配置

1. zookeeper安裝配置

需要說明一下, 為了支持 Kafka 的集群功能, Zookeeper 必須使用集群模式部署。
本文以部署 3 個Zookeeper 實例的偽集群為例。具體安裝步驟參閱之前的文章:Zookeeper 安裝教程和使用指南

2. kafka安裝配置

下載鏈接:Kafka Downloads

下載頁面中包含兩種下載方式

  • : kafka-[version]-src.tgz:包含 Kafka 源碼和API源碼,需要自己編譯

a) 安裝

[root@Ali ~]# wget https://downloads.apache.org/kafka/3.6.2/kafka_2.12-3.6.2.tgz
[root@Ali ~]# tar xzvf kafka_2.12-3.6.2.tgz
[root@Ali ~]# mv /usr/local/kafka_2.12-3.6.2 /usr/local/kafka

b) 配置實例

配置第一個 Kafka 實例

# broker 編號,集群內必須唯一
broker.id=1
# 監聽所有ip的9091端口,PLAINTEXT表示明文傳輸
listeners=PLAINTEXT://:9091
# 相當于listeners=PLAINTEXT://0.0.0.0:9091
# 消息日志存放地址
log.dirs=/usr/local/kafka/logs
# ZooKeeper 地址,多個用,分隔   /kafka指定在zk上的目錄
zookeeper.connect=localhost:12181/kafka,localhost:22181/kafka

配置第二個 Kafka 實例

# broker 編號,集群內必須唯一
broker.id=1
# 監聽所有ip的9092端口,PLAINTEXT表示明文傳輸
listeners=PLAINTEXT://:9092
# 消息日志存放地址
log.dirs=/opt/kafka/logs
# ZooKeeper 地址,多個用,分隔
zookeeper.connect=localhost:12181/kafka,localhost:22181/kafka

注:兩個客戶端的listeners中的port不能一樣

4) 服務管理

# 啟動服務 -daemon 表示后臺啟動
$KAFKA_HOME/bin/kafka-server-start.sh -daemon config/server.properties# 查看服務
jps -l43330 org.apache.zookeeper.server.quorum.QuorumPeerMain14356 org.elasticsearch.bootstrap.Elasticsearch14583 org.logstash.Logstash45976 kafka.Kafka  # kafka服務進程netstat -anlpt | grep 9091tcp6       0      0 :::9091                 :::*                    LISTEN      45976/javatcp6       0      0 192.168.18.128:9091     192.168.18.128:49356    TIME_WAIT   -# 關閉服務
$KAFKA_HOME/bin/kafka-server-stop.sh

3. 常用操作

1) 創建topic

 #兩條命令效果一樣
bin/kafka-topics.sh --create --bootstrap-server localhost:9091 --partitions 2 --replication-factor 2 --topic yumu
bin/kafka-topics.sh --create --zookeeper localhost:2181/kafka --partitions 2 --replication-factor 2 --topic yumu 

在kafka1上創建一個topic,會自動同步到其他客戶端

  • --create表示創建操作
  • --zookeeper 指定了 Kafka 連接的 ZooKeeper
  • --partitions 表示每個主題4個分區
  • --replication-factor 表示創建每個分區創建2個副本(副本因子)
  • --topic 表示主題名稱。
    注:副本因子不能超過存活的broker數量,否則報錯:Replication factor: 20 larger than available brokers: xxx.

2) 查看topic

# 查看topic列表     #兩條命令效果一樣
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
bin/kafka-topics.sh --list --zookeeper localhost:2181/kafka __consumer_offsetstopic-demoyumu# 查看topic詳細信息   #兩條命令效果一樣
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic yumu
bin/kafka-topics.sh --zookeeper localhost:2181/kafka --describe --topic yumu Topic: yumu	PartitionCount: 2	ReplicationFactor: 2	Configs:Topic: yumu	Partition: 0	Leader: 1	Replicas: 1,2	Isr: 1,2Topic: yumu	Partition: 1	Leader: 1	Replicas: 2,1	Isr: 1,2

3) 測試通信

# 窗口1,啟動生產者,向yumu主題發送消息
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic yumu# 窗口2,啟動消費者,訂閱yumu主題
bin/kafka-console-consumer.sh --bootstrap-server localhost:9091 --topic yumu# 窗口3,啟動消費者,訂閱yumu主題
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic yumu=====結果=====
# 生產者
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic yumu
>hello, kafka!
>once again.
>
# 消費者1
bin/kafka-console-consumer.sh --bootstrap-server localhost:9091 --topic yumu
hello, kafka!
once again.# 消費者2
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic yumu
hello, kafka!
once again.# 查看所有消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic yumu --from-beginning# 刪除topic
bin/kafka-topics.sh --delete --bootstrap-server localhost:9091  --topic yumu

三、遇到的問題

1. 第一次啟動kafka成功后,關閉kafka并修改配置,再次啟動失敗,報錯如下:

[2020-11-07 20:43:00,866] INFO Cluster ID = MChFWWMBT9GJClVEriND5A (kafka.server.KafkaServer)
[2020-11-07 20:43:00,873] ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.common.InconsistentClusterIdException: The Cluster ID MChFWWMBT9GJClVEriND5A doesn't match stored clusterId Some(c6QPfvqlS6C3gtsYZptQ8Q) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.at kafka.server.KafkaServer.startup(KafkaServer.scala:235)at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:44)at kafka.Kafka$.main(Kafka.scala:82)at kafka.Kafka.main(Kafka.scala)
[2020-11-07 20:43:00,875] INFO shutting down (kafka.server.KafkaServer)
[2020-11-07 20:43:00,877] INFO [ZooKeeperClient Kafka server] Closing. (kafka.zookeeper.ZooKeeperClient)
[2020-11-07 20:43:00,986] INFO Session: 0x1000da0dde2000c closed (org.apache.zookeeper.ZooKeeper)
[2020-11-07 20:43:00,986] INFO EventThread shut down for session: 0x1000da0dde2000c (org.apache.zookeeper.ClientCnxn)
[2020-11-07 20:43:00,987] INFO [ZooKeeperClient Kafka server] Closed. (kafka.zookeeper.ZooKeeperClient)
[2020-11-07 20:43:00,992] INFO shut down completed (kafka.server.KafkaServer)[2020-11-07 20:43:00,992] ERROR Exiting Kafka. (kafka.server.KafkaServerStartable)
[2020-11-07 20:43:00,993] INFO shutting down (kafka.server.KafkaServer)

原因:
kafka啟動之后會生成一些日志和配置,導致這個問題的原因是第一次啟動之后生成了log/meta.properties文件

cat meta.properties
#
#Sat Nov 07 21:43:51 CST 2020
broker.id=1
version=0
cluster.id=MChFWWMBT9GJClVEriND5A

第二次改完配置后再去啟動的時候生成應該會生成一個新的id,新的id和舊的ID不一致導致無法啟動,刪除log/meta.properties文件后重新啟動即可(疑問:是不是我關閉的方法不對呢?)

推薦閱讀:

  • Kafka介紹
  • ELK介紹
  • Kafka安裝
  • C語言操作kafka以及安裝librdkafka庫

下一篇:Kafka消息系統原理

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16524.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16524.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16524.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于YOLO算法實現網球運動實時分析(附源碼)

大家好,我是小F~ 今天給大家介紹一個計算機視覺實戰的項目。 該項目使用YOLO算法檢測球員和網球,并利用cnn提取球場關鍵點。 進而分析視頻中的網球運動員,測量他們的速度、擊球速度和擊球次數。 使用win10電腦,Python …

【源碼】java + uniapp交易所源代碼/帶搭建教程java交易所/完整源代碼

java uniapp交易所源代碼/帶搭建教程java交易所/完整源代碼 帶簡潔教程,未測 java uniapp交易所源代碼/帶搭建教程java交易所/完整源代碼 - 吾愛資源網

【古董技術】ms-dos應用程序的結構

序 制定一個MS-DOS應用程序計劃需要認真分析程序的大小。這種分析可以幫助程序員確定MS-DOS支持的兩種程序風格中哪一種最適合該應用程序。.EXE程序結構為大型程序提供了好處,因為所有.EXE文件之前都有額外的512字節(或更多)的文件頭。另一方…

C++第十七彈---string使用(下)

?個人主頁: 熬夜學編程的小林 💗系列專欄: 【C語言詳解】 【數據結構詳解】【C詳解】 目錄 1、標準庫中的string類 1.1、string類的常用接口說明 1.1.1、string類對象的修改操作 1.1.2、string類對象非成員函數重載 總結 1、標準庫中的…

牛客熱題:有效括號

📟作者主頁:慢熱的陜西人 🌴專欄鏈接:力扣刷題日記 📣歡迎各位大佬👍點贊🔥關注🚓收藏,🍉留言 文章目錄 牛客熱題:有效括號題目鏈接方法一&#x…

MySQL視圖教程(01):創建視圖

MySQL 創建視圖 在 MySQL 中, CREATE VIEW 語句用于創建一個數據庫視圖(View)。 MySQL 是一種常用的關系型數據庫管理系統,提供了 CREATE VIEW 語法,用于創建視圖(View)。視圖是一種虛擬的表&…

Mycat+Mysql搭建數據集群實現數據分片存儲

前言 MyCAT介紹 * 一個徹底開源的,面向企業應用開發的“大數據庫集群”; * 支持事務、ACID、可以替代MySQL的加強版數據庫; * 一個可以視為“MySQL”集群的企業級數據庫,用來替代昂貴的Oracle集群; * 一個融合內存緩存技術、Nosql技術、HDFS大數據的新型SQL; * 一個新穎…

QCC---DFU升級變更設備名和地址

QCC---DFU升級變更設備名和地址 這個很多人碰到這個疑問,升級了改不了設備名和地址 /******************************************************************************* Copyright (c) 2018 Qualcomm Technologies International, Ltd. FILE NAME sink_dfu_ps.c DESCRIPT…

2024.5.1學習記錄

1、代碼隨想錄:貪心刷題 2、react 高級使用( hoc render、props、函數組件、serState 傳送門等) 3、游山玩水

《拯救大學生課設不掛科第四期之藍橋杯是什么?我是否要參加藍橋杯?選擇何種語言?如何科學備賽?方法思維教程》【官方筆記】

背景: 有些同學在大一或者大二可能會被老師建議參加藍橋杯,本視頻和文章主要是以一個過來人的身份來給與大家一些思路。 比如藍橋杯是什么?我是否要參加藍橋杯?參加藍橋杯該選擇何種語言?如何科學備賽?等…

2023年信息素養大賽小學組C++智能算法復賽試題解析

2023年信息素養大賽小學組C++智能算法復賽真題 智能算法挑戰復賽小學組(總共4道題)T1. 判斷數字出現了幾次 【題目描述】 給定一個正整數 n,判斷從 1 到這個數本身的所有數中,一共出現了多少次數字k。 【輸入格式】 輸入共1行,包括一個正整數n和一個正整數k。(0<n<…

JavaEE之線程(7)_單例模式(設計模式概念、單例模式優點、懶漢、餓漢模式)

一、什么是設計模式&#xff1f; 單例模式是設計模式中較為常見的一種。那么&#xff0c;什么是單例模式&#xff1f; 設計模式&#xff08;Design Pattern&#xff09;都是一些相對優秀的解決方案&#xff0c;很多問題都是典型的、有代表性的問題&#xff0c;學習設計模式&am…

C#面:如果出現ASP.NET中的事件不能觸發可能由于什么原因造成

當 ASP.NET 中的事件不能觸發時&#xff0c;可能由以下幾個原因造成&#xff1a; 事件綁定錯誤&#xff1a;請確保事件正確地綁定到相應的控件上。在 ASP.NET 中&#xff0c;可以通過在前端代碼或者后端代碼中使用事件處理程序來綁定事件。如果事件沒有正確地綁定到控件上&…

為什么本科畢業后我堅定地選擇了就業而不是考研?

大家好&#xff0c;我是小布丁。今天來聊聊我為什么本科畢業后選擇了就業而不是考研。 在整個大學期間&#xff0c;我被親戚拷問最多的問題就是&#xff1a;準備考研嗎&#xff1f;相信很多大學生都遇到過這種情況吧。 如果你說準備還好&#xff0c;親戚大概率就不會問下去&a…

js計算字符串大小存儲所占字節數

在JavaScript中&#xff0c;計算字符串所占的大小&#xff08;占用的字節數&#xff09;并不直接&#xff0c;但可以通過一些方法間接得到。 我們需要知道一個前提&#xff0c;英文字母 lenght 和字節數是一樣的&#xff1a;都是1&#xff0c;而中文 lenght1&#xff0c;字節數…

golang sqlite主從數據同步插件開發

### golang sqlite主從數據同步插件開發思路 參考Mysql的主從同步機制&#xff0c;Mysql是產生binlog&#xff0c;然后把binlog日志同步到從服務上。 同理&#xff0c;我們按sql執行順序記錄所有的增刪改查的sql語句&#xff0c;然后調用接口把sql語句傳到從服務上執行。 數…

關于軟件設計模式的理解

系列文章 關于時間復雜度o(1), o(n), o(logn), o(nlogn)的理解 關于HashMap的哈希碰撞、拉鏈法和key的哈希函數設計 關于JVM內存模型和堆內存模型的理解 關于代理模式的理解 關于Mysql基本概念的理解 關于軟件設計模式的理解 文章目錄 前言一、軟件設計模式遵循的六大原則…

前端面試題日常練-day35 【面試題】

題目 希望這些選擇題能夠幫助您進行前端面試的準備&#xff0c;答案在文末。 1. 以下哪個是使用jQuery選擇所有具有CSS類名"myClass"的元素的正確語法&#xff1f; a) $(".myClass") b) $("myClass") c) $("#myClass") d) $("…

FURNet問題

1. 為什么選擇使用弱監督學習&#xff1f; 弱監督學習減少了對精確標注數據的依賴&#xff0c;這在醫學圖像處理中尤為重要&#xff0c;因為高質量標注數據通常需要大量專業知識和時間。弱監督學習通過利用少量標注數據或粗略標注數據來訓練模型&#xff0c;降低了數據準備的成…

元組推導式

自學python如何成為大佬(目錄):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 使用元組推導式可以快速生成一個元組&#xff0c;它的表現形式和列表推導式類似&#xff0c;只是將列表推導式中的“[]”修改為“()”。例如&#xf…