kafka

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 15, 2021 License: Apache-2.0 Imports: 18 Imported by: 0

README

A repository for go-micro kafka plugin

Overview

Micro tooling is built on a powerful pluggable architecture. Plugins can be swapped out with zero code changes. This repository contains plugins only for kafka broker, try to avoid too much unused dependencies of micro/go-plugins.

Getting Started

Contents

Contents of this repository:

Directory Description
Broker PubSub messaging; kafka

Usage

Plugins can be added to go-micro in the following ways. By doing so they'll be available to set via command line args or environment variables.

Import the plugins in a Go program then call service.Init to parse the command line and environment variables.

import (
	"github.com/asim/go-micro/v3"
	_ "github.com/x-punch/micro-kafka/v3"
	_ "github.com/micro/go-plugins/registry/kubernetes"
	_ "github.com/micro/go-plugins/transport/nats"
)

func main() {
	service := micro.NewService(
		// Set service name
		micro.Name("my.service"),
	)

	// Parse CLI flags
	service.Init()
}
Flags

Specify the plugins as flags

go run service.go --broker=kafka --registry=kubernetes --transport=nats
Env

Use env vars to specify the plugins

MICRO_BROKER=kafka \
MICRO_REGISTRY=kubernetes \ 
MICRO_TRANSPORT=nats \ 
go run service.go
Options

Import and set as options when creating a new service

import (
	"github.com/asim/go-micro/v3"
	"github.com/asim/go-micro/plugins/registry/kubernetes/v3"
)

func main() {
	registry := kubernetes.NewRegistry() //a default to using env vars for master API

	service := micro.NewService(
		// Set service name
		micro.Name("my.service"),
		// Set service registry
		micro.Registry(registry),
	)
}

Build

An anti-pattern is modifying the main.go file to include plugins. Best practice recommendation is to include plugins in a separate file and rebuild with it included. This allows for automation of building plugins and clean separation of concerns.

Create file plugins.go

package main

import (
	_ "github.com/x-punch/micro-kafka/v3"
	_ "github.com/micro/go-plugins/registry/kubernetes"
	_ "github.com/micro/go-plugins/transport/nats"
)

Build with plugins.go

go build -o service main.go plugins.go

Run with plugins

MICRO_BROKER=kafka \
MICRO_REGISTRY=kubernetes \
MICRO_TRANSPORT=nats \
service

Documentation

Overview

Package kafka provides a kafka broker using sarama cluster

Index

Constants

This section is empty.

Variables

View Source
var (
	DefaultBrokerConfig  = sarama.NewConfig()
	DefaultClusterConfig = sarama.NewConfig()
)

Functions

func BrokerConfig

func BrokerConfig(c *sarama.Config) broker.Option

func ClusterConfig

func ClusterConfig(c *sarama.Config) broker.Option

func NewBroker

func NewBroker(opts ...broker.Option) broker.Broker

func SubscribeConfig

func SubscribeConfig(c *sarama.Config) broker.SubscribeOption

func SubscribeContext

func SubscribeContext(ctx context.Context) broker.SubscribeOption

SubscribeContext set the context for broker.SubscribeOption

Types

type Marshaler

type Marshaler struct{}

Marshaler is a simple encoding interface used for the broker/transport where headers are not supported by the underlying implementation.

func (Marshaler) Marshal

func (Marshaler) Marshal(v interface{}) ([]byte, error)

Marshal returns the JSON encoding of v

func (Marshaler) String

func (Marshaler) String() string

func (Marshaler) Unmarshal

func (Marshaler) Unmarshal(d []byte, v interface{}) error

Unmarshal parses the JSON-encoded data and stores the result in the value pointed to by v.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL