Skip to content

Commit 4d3437c

Browse files
parmesantnitishtde-sh
authored
Feature: Enable Kafka integration (#1021)
Fixes #936 --------- Signed-off-by: parmesant <[email protected]> Co-authored-by: Nitish Tiwari <[email protected]> Co-authored-by: Devdutt Shenoi <[email protected]>
1 parent b277775 commit 4d3437c

File tree

6 files changed

+400
-1
lines changed

6 files changed

+400
-1
lines changed

Cargo.lock

Lines changed: 51 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ num_cpus = "1.15"
6666
once_cell = "1.17.1"
6767
prometheus = { version = "0.13", features = ["process"] }
6868
rand = "0.8.5"
69+
rdkafka = {version = "0.36.2", default-features = false, features = ["tokio"]}
6970
regex = "1.7.3"
7071
relative-path = { version = "1.7", features = ["serde"] }
7172
reqwest = { version = "0.11.27", default-features = false, features = [

src/cli.rs

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use std::path::PathBuf;
2222
use url::Url;
2323

2424
use crate::{
25+
kafka::SslProtocol,
2526
oidc::{self, OpenidConfig},
2627
option::{validation, Compression, Mode},
2728
};
@@ -107,6 +108,14 @@ pub struct Cli {
107108
pub trino_auth: Option<String>,
108109
pub trino_schema: Option<String>,
109110
pub trino_catalog: Option<String>,
111+
112+
// Kafka specific env vars
113+
pub kafka_topics: Option<String>,
114+
pub kafka_host: Option<String>,
115+
pub kafka_group: Option<String>,
116+
pub kafka_client_id: Option<String>,
117+
pub kafka_security_protocol: Option<SslProtocol>,
118+
pub kafka_partitions: Option<String>,
110119
}
111120

112121
impl Cli {
@@ -148,6 +157,14 @@ impl Cli {
148157
pub const TRINO_AUTHORIZATION: &'static str = "p-trino-authorization";
149158
pub const TRINO_SCHEMA: &'static str = "p-trino-schema";
150159

160+
// Kafka specific env vars
161+
pub const KAFKA_TOPICS: &'static str = "kafka-topics";
162+
pub const KAFKA_HOST: &'static str = "kafka-host";
163+
pub const KAFKA_GROUP: &'static str = "kafka-group";
164+
pub const KAFKA_CLIENT_ID: &'static str = "kafka-client-id";
165+
pub const KAFKA_SECURITY_PROTOCOL: &'static str = "kafka-security-protocol";
166+
pub const KAFKA_PARTITIONS: &'static str = "kafka-partitions";
167+
151168
pub fn local_stream_data_path(&self, stream_name: &str) -> PathBuf {
152169
self.local_staging_path.join(stream_name)
153170
}
@@ -161,6 +178,48 @@ impl Cli {
161178

162179
pub fn create_cli_command_with_clap(name: &'static str) -> Command {
163180
Command::new(name).next_line_help(false)
181+
.arg(
182+
Arg::new(Self::KAFKA_TOPICS)
183+
.long(Self::KAFKA_TOPICS)
184+
.env("P_KAFKA_TOPICS")
185+
.value_name("STRING")
186+
.help("Kafka topics to subscribe to"),
187+
)
188+
.arg(
189+
Arg::new(Self::KAFKA_HOST)
190+
.long(Self::KAFKA_HOST)
191+
.env("P_KAFKA_HOST")
192+
.value_name("STRING")
193+
.help("Address and port for Kafka server"),
194+
)
195+
.arg(
196+
Arg::new(Self::KAFKA_GROUP)
197+
.long(Self::KAFKA_GROUP)
198+
.env("P_KAFKA_GROUP")
199+
.value_name("STRING")
200+
.help("Kafka group"),
201+
)
202+
.arg(
203+
Arg::new(Self::KAFKA_CLIENT_ID)
204+
.long(Self::KAFKA_CLIENT_ID)
205+
.env("P_KAFKA_CLIENT_ID")
206+
.value_name("STRING")
207+
.help("Kafka client id"),
208+
)
209+
.arg(
210+
Arg::new(Self::KAFKA_SECURITY_PROTOCOL)
211+
.long(Self::KAFKA_SECURITY_PROTOCOL)
212+
.env("P_KAFKA_SECURITY_PROTOCOL")
213+
.value_name("STRING")
214+
.help("Kafka security protocol"),
215+
)
216+
.arg(
217+
Arg::new(Self::KAFKA_PARTITIONS)
218+
.long(Self::KAFKA_PARTITIONS)
219+
.env("P_KAFKA_PARTITIONS")
220+
.value_name("STRING")
221+
.help("Kafka partitions"),
222+
)
164223
.arg(
165224
Arg::new(Self::TRINO_ENDPOINT)
166225
.long(Self::TRINO_ENDPOINT)
@@ -466,6 +525,13 @@ impl FromArgMatches for Cli {
466525
self.trino_schema = m.get_one::<String>(Self::TRINO_SCHEMA).cloned();
467526
self.trino_username = m.get_one::<String>(Self::TRINO_USER_NAME).cloned();
468527

528+
self.kafka_topics = m.get_one::<String>(Self::KAFKA_TOPICS).cloned();
529+
self.kafka_host = m.get_one::<String>(Self::KAFKA_HOST).cloned();
530+
self.kafka_group = m.get_one::<String>(Self::KAFKA_GROUP).cloned();
531+
self.kafka_client_id = m.get_one::<String>(Self::KAFKA_CLIENT_ID).cloned();
532+
self.kafka_security_protocol = m.get_one::<SslProtocol>(Self::KAFKA_SECURITY_PROTOCOL).cloned();
533+
self.kafka_partitions = m.get_one::<String>(Self::KAFKA_PARTITIONS).cloned();
534+
469535
self.tls_cert_path = m.get_one::<PathBuf>(Self::TLS_CERT).cloned();
470536
self.tls_key_path = m.get_one::<PathBuf>(Self::TLS_KEY).cloned();
471537
self.trusted_ca_certs_path = m.get_one::<PathBuf>(Self::TRUSTED_CA_CERTS_PATH).cloned();

0 commit comments

Comments
 (0)