diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,8 @@
-## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.9.1.0...main)
+## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.9.1.1...main)
+
+## [v1.9.1.1](https://github.com/freckle/freckle-app/compare/v1.9.1.0...v1.9.1.1)
+
+- Add `KafkaProducerPoolConfig` for controlling Kafka producer pool parameters
 
 ## [v1.9.1.0](https://github.com/freckle/freckle-app/compare/v1.9.0.3...v1.9.1.0)
 
diff --git a/freckle-app.cabal b/freckle-app.cabal
--- a/freckle-app.cabal
+++ b/freckle-app.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.18
 name:               freckle-app
-version:            1.9.1.0
+version:            1.9.1.1
 license:            MIT
 license-file:       LICENSE
 maintainer:         Freckle Education
diff --git a/library/Freckle/App/Kafka.hs b/library/Freckle/App/Kafka.hs
--- a/library/Freckle/App/Kafka.hs
+++ b/library/Freckle/App/Kafka.hs
@@ -1,7 +1,10 @@
+{-# LANGUAGE ApplicativeDo #-}
 {-# LANGUAGE NamedFieldPuns #-}
 
 module Freckle.App.Kafka
   ( envKafkaBrokerAddresses
+  , KafkaProducerPoolConfig (..)
+  , envKafkaProducerPoolConfig
   , KafkaProducerPool (..)
   , HasKafkaProducerPool (..)
   , createKafkaProducerPool
@@ -40,37 +43,58 @@
     | x /= "" -> Right $ BrokerAddress <$> xs
   _ -> Left "Broker Address cannot be empty"
 
-data KafkaProducerPool
-  = NullKafkaProducerPool
-  | KafkaProducerPool (Pool KafkaProducer)
-
-class HasKafkaProducerPool env where
-  kafkaProducerPoolL :: Lens' env KafkaProducerPool
-
-instance HasKafkaProducerPool site => HasKafkaProducerPool (HandlerData child site) where
-  kafkaProducerPoolL = envL . siteL . kafkaProducerPoolL
-
-createKafkaProducerPool
-  :: NonEmpty BrokerAddress
-  -> Int
+data KafkaProducerPoolConfig = KafkaProducerPoolConfig
+  { kafkaProducerPoolConfigStripes :: Int
   -- ^ The number of stripes (distinct sub-pools) to maintain.
   -- The smallest acceptable value is 1.
-  -> NominalDiffTime
+  , kafkaProducerPoolConfigIdleTimeout :: NominalDiffTime
   -- ^ Amount of time for which an unused resource is kept open.
   -- The smallest acceptable value is 0.5 seconds.
   --
   -- The elapsed time before destroying a resource may be a little
   -- longer than requested, as the reaper thread wakes at 1-second
   -- intervals.
-  -> Int
+  , kafkaProducerPoolConfigSize :: Int
   -- ^ Maximum number of resources to keep open per stripe.  The
   -- smallest acceptable value is 1.
   --
   -- Requests for resources will block if this limit is reached on a
   -- single stripe, even if other stripes have idle resources
   -- available.
+  }
+  deriving stock (Show)
+
+-- | Same defaults as 'Database.Persist.Sql.ConnectionPoolConfig'
+defaultKafkaProducerPoolConfig :: KafkaProducerPoolConfig
+defaultKafkaProducerPoolConfig = KafkaProducerPoolConfig 1 600 10
+
+envKafkaProducerPoolConfig
+  :: Env.Parser Env.Error KafkaProducerPoolConfig
+envKafkaProducerPoolConfig = do
+  poolSize <- Env.var Env.auto "KAFKA_PRODUCER_POOL_SIZE" $ Env.def 10
+  pure $ defaultKafkaProducerPoolConfig {kafkaProducerPoolConfigSize = poolSize}
+
+data KafkaProducerPool
+  = NullKafkaProducerPool
+  | KafkaProducerPool (Pool KafkaProducer)
+
+class HasKafkaProducerPool env where
+  kafkaProducerPoolL :: Lens' env KafkaProducerPool
+
+instance HasKafkaProducerPool site => HasKafkaProducerPool (HandlerData child site) where
+  kafkaProducerPoolL = envL . siteL . kafkaProducerPoolL
+
+createKafkaProducerPool
+  :: NonEmpty BrokerAddress
+  -> KafkaProducerPoolConfig
   -> IO (Pool KafkaProducer)
-createKafkaProducerPool addresses = Pool.createPool mkProducer closeProducer
+createKafkaProducerPool addresses KafkaProducerPoolConfig {..} =
+  Pool.createPool
+    mkProducer
+    closeProducer
+    kafkaProducerPoolConfigStripes
+    kafkaProducerPoolConfigIdleTimeout
+    kafkaProducerPoolConfigSize
  where
   mkProducer =
     either throw pure =<< newProducer (brokersList $ toList addresses)
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: freckle-app
-version: 1.9.1.0
+version: 1.9.1.1
 maintainer: Freckle Education
 category: Utils
 github: freckle/freckle-app
