├── .gitignore ├── README.md ├── src ├── main.rs └── rust_consume.rs └── Cargo.toml /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # keystroke-consumer-rs 2 | Kafka Consumer Script for keystroke project 3 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | mod rust_consume; 2 | use rust_consume::receive_msg; 3 | 4 | fn main() { 5 | receive_msg(); 6 | } 7 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rust-consumer" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | kafka = "0.9.0" 10 | -------------------------------------------------------------------------------- /src/rust_consume.rs: -------------------------------------------------------------------------------- 1 | use kafka::{ 2 | consumer::{Consumer, GroupOffsetStorage}, 3 | error::Error as KafkaError, 4 | }; 5 | 6 | pub fn receive_msg() { 7 | let broker = "localhost:9092".to_owned(); 8 | let topic = "test".to_owned(); 9 | 10 | if let Err(e) = consume_messages(topic, vec![broker]) { 11 | println!("Failed consuming messages: {:?}", e); 12 | } 13 | } 14 | 15 | fn consume_messages(topic: String, brokers: Vec) -> Result<(), KafkaError> { 16 | let mut con = Consumer::from_hosts(brokers) 17 | .with_topic(topic) 18 | // .with_group(group) 19 | .with_fallback_offset(kafka::consumer::FetchOffset::Earliest) 20 | // .with_offset_storage(GroupOffsetStorage::Kafka) 21 | .create()?; 22 | 23 | loop { 24 | let mss = con.poll()?; 25 | // if mss.is_empty() { 26 | // println!("No messages available right now."); 27 | // // return Ok(()); 28 | // } 29 | 30 | for ms in mss.iter() { 31 | for m in ms.messages() { 32 | println!( 33 | "{}:{}@{}: {:?}", 34 | ms.topic(), 35 | ms.partition(), 36 | m.offset, 37 | String::from_utf8(m.value.to_owned()).unwrap() 38 | ); 39 | } 40 | let _ = con.consume_messageset(ms); 41 | } 42 | con.commit_consumed()?; 43 | } 44 | } 45 | --------------------------------------------------------------------------------